Codeforces Round #770 (Div. 2)B,C
还是惨绝人寰的只做了一个题,ε=(´ο`*)))唉
B
这一道题大意是是首先有一个d,然后有n个操作,从1到n,每一次我们都需要选择让d=d+a[i]还是d=d^a[i],有两个人,Alice最初的d=x,Bob最初的d=x+3,然后我们的答案是谁可以在进行n次操作后把d变成y,就输出那个人的名字
首先我们可以看到x,和x+3的区别是什么?
x和x+3的奇偶性一定不同,而无论是+a[i],还是^a[i]对于d的奇偶性的变化都是一样的,那么在我眼里,不管是加法还是异或,d的奇偶性变化只和数值有关,而一开始x和x+3的奇偶性就不同,而且题目也明确告知一定有一个人可以变成y,那么我们只需要直接判断即可
#include <iostream>
#include <stdlib.h>
using namespace std;
const int maxn=2e5+10;
#define int long long
int t,n,x,y;
void solve()
{
cin>>n>>x>>y;
for (int i=1;i<=n;i++)
{
int tmp;
cin>>tmp;
x=(x%2+tmp%2)%2;
}
if (x%2==y%2)
{
cout<<"Alice\n";
}
else
{
cout<<"Bob\n";
}
return ;
}
signed main ()
{
cin>>t;
while (t--)
{
solve();
}
system ("pause");
return 0;
}
C
这一题大意是有nk件物品,每一件物品的价值在1到nk的范围里,并且每两件物品的价值一定不一样,有n个货架,每个货架里有k件物品,但是我们需要知道怎样摆放物品才可以让i个货架的任意一段区间里的物品的平均值为整数
要使任意一段区间里的平均值为整数,只有这一个货架里的所有价值的奇偶性相同
所以我们只要把奇数和奇数放在一起,偶数和偶数放在一起即可
详见代码
#include <iostream>
#include <vector>
using namespace std;
#define int long long
int n,k,t;
void solve()
{
cin>>n>>k;
// cout<<'\n';
vector<int>ans[3];
int tot=n*k;
if (tot/2%k==0&&(tot+1)/2%k==0)
{
cout<<"YES\n";
// cout<<tot/2<<" "<<(tot+1)/2<<'\n';
for (int i=2;i<=tot;)
{
for (int j=1;j<=k;j++)
{
cout<<i<<" ";
i+=2;
}
cout<<'\n';
}
for (int i=1;i<=tot;)
{
for (int j=1;j<=k;j++)
{
cout<<i<<" ";
i+=2;
}
cout<<'\n';
}
}
else
{
cout<<"NO\n";
}
//cout<<'\n';
return ;
}
signed main ()
{
cin>>t;
while (t--)
{
solve();
}
system ("pause");
return 0;
}
标签:货架,770,int,奇偶性,long,Codeforces,solve,Div,include
From: https://www.cnblogs.com/righting/p/17002751.html