题意
题解
代码
方法一:暴力
#include
using namespace std;
int n,m;
bool check(int x,int y) {//islocate
if((x-2<1 || y-1<1) && (x-2<1 || y+1>m) && (x-1<1 || y-2<1) && (x-1<1 || y+2>m)
&& (x+1>n || y-2<1) && (x+1>n || y+2>m) && (x+2>n || y-1<1) && (x+2>n || y+1>m))
return 1;
else return 0;
}
void solve() {
cin>>n>>m;
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
if(check(i,j)) {
cout<<i<<' '<<j<<'\n';
return ;
}
}
}
cout<<n<<' '<<m<<'\n';
}
int main() {
int t;
cin>>t;
while(t--) solve();
return 0;
}
方法二:贪心
//中心
void solve()
{
int n,m;
cin >> n >> m;
cout << (n+1)/2 << " " << (m+1)/2 << endl;
}
//特判2 2
void solve()
{
int n,m;
cin >> n >> m;
if (n==1 || m==1){
cout << "1 1" << endl;
return;
}
cout << 2 << " " << 2 << endl;
}
题意
题解
代码
#include
using namespace std;
const int N=110;
int n,a[N],d[N];
void solve() {
cin>>n;
for(int i=1;i<=n;i++) cin>>d[i];
for(int i=1;i<=n;i++) {
int t1=a[i-1]+d[i];//a[i]可能值
int t2=a[i-1]-d[i];//a[i]可能值
if(t1>=0 && t2>=0 && t1!=t2) {//判断是否有唯一合法的a[i]
cout<<-1<<'\n';
return ;
}
a[i]=t1;
}
for(int i=1;i<=n;i++) cout<<a[i]<<' ';
cout<<'\n';
}
int main() {
int t;
cin>>t;
while(t--) solve();
return 0;
}
题意
题解
易得,无论如何玩家一定会先出手中最大的牌。因为如果先手有全场最大的牌直接出就赢了,后手有最大的牌,那么先手一定用次大的牌逼出后手用掉最大牌,而后手也必须这么做,否则输掉比赛
平局的情况一定是(只有一种)
A: n-1 n-2 n-5 n-6 ...
B: n n-3 n-4 n-7 ...
C(n,n/2)为总的情况数,1中平局,那么只要算出A必胜的情况数,直接相减即可得到B必胜的情况数。
如何计算A必胜呢?假设f[n]为总牌数为n的情况下A必胜的数量,相对于平局来看,如果A直接拥有牌n,那么直接胜利,胜利情况数为C(n-1,n/2);如果n在B手上,那么要赢,只能让这一轮先平局,所以A手上有n-1,对于第二轮先手交换,即B先手,那么A赢即为牌数只有n-2时,B赢得数量(因为先后手交换了),所以A胜利情况为B赢得情况=C(n-2,(n-2)/2)-C(n-2-1,(n-2)/2)-1
往后轮次依次递推即可
代码
#include
using namespace std;
const int N=65,mod=998244353;
int c[N][N];
int n;
void init() {//预处理组合数
for(int i=0;i<N;i++)
for(int j=0;j<=i;j++)
if(!j)c[i][j]=1;
else c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
}
void solve() {
cin>>n;
long long a=1,b=0;//初始化i=2时,即牌数最小时
for(int i=4;i<=n;i+=2) {
a=(c[i-1][i/2-1]+b)%mod;//第一轮必胜+第一轮平局第二轮上一种牌数必输
b=(c[i][i/2]-a-1+mod)%mod;//必输情况更新
}
cout<<a<<' '<<(c[n][n/2]-a+mod-1)%mod<<' '<<1<<'\n';//注意负数取摸
}
int main() {
init();
int t;
cin>>t;
while(t--) solve();
return 0;
}