A题 https://codeforces.com/contest/1651/problem/A
思路找规律: 第一轮是偶数个对,而且每组之和为奇数,那选出来的都是奇数,这样下去每次选之后都是大的奇数出来(每组之和都为偶数)那最大的奇数就肯定赢了,最大的奇数就是2的n次方减一
#include<iostream>
using namespace std;
int t;
int q;
int k = 1;
int main()
{
cin >> t;
while(t --)
{
k = 1;
cin >> q;
for(int i = 1; i <= q; i ++)
k *= 2;
printf("%d\n",k - 1);
}
return 0;
}
B题 https://codeforces.com/contest/1651/problem/B
注意有等于的情况,上图并未提及
其实就是每个a[j] >= a[j] 都有a[j] >= 3a[i];
而1, 3, 9,27其实就是满足3倍条件的最小符合数列,因为有数据限制(1e9)所以当最小的数列不满足的时候这个时候的数组长度也就没用了因为,最小的符合数列已经超过函数了
#include<iostream>
using namespace std;
const int N = 1010;
int a[N];
int t, n;
int main()
{
cin >> t;
for(int i = 0; i < t; i ++)
cin >> a[i];
for(int i = 0; i < t; i ++)
{
if(a[i] <= 19)
{
//cout << a[i];
cout << "Yes\n";
int k = 1;
int q = a[i];
for(int i = 1; i <= q; i ++)
{
//cout << a[i];
cout << k <<' ';
k *= 3;
//cout << k <<' ';
}
cout << '\n';
}
else cout << "No\n";
}
return 0;
}
求关注