Codeforces Round#664題解(A~C)
2427 ワード
1395A - Boboniu Likes to Color Balls
r,b,g,wにおいて奇数以下である場合、これを回文とすることができる.そうでない場合は、1回(できれば)操作して、上記の状況を確認してください.r,b,g,wのパリティのみに関心を持つため,複数回の操作は意味がない.
1395B - Boboniu Plays Chess
仮定(f(i,j)=((i+Sx-2)modn+1,(j+Sy-2)mod(m+1)).iを1からnに反復します.iが奇数の場合、(f(i,1)、f(i,2),...,f(i,m))が印刷されます.そうでなければ(f(i,m),f(i,m-1),...,f(i,1))を印刷します.
1395C - Boboniu and Bit Operations
答えをAと仮定する.従って、全ての(i(1≦i≦n)について、c_i | A = A\). (a_i,b_i<2^9)のため、(0から2^9-1)のすべての整数を列挙し、各iに(j(ai&bj)|A=A)が存在するかどうかを確認することができます.一番少ないのは答えです.時間複雑度(O(2^9⋅n^2))
r,b,g,wにおいて奇数以下である場合、これを回文とすることができる.そうでない場合は、1回(できれば)操作して、上記の状況を確認してください.r,b,g,wのパリティのみに関心を持つため,複数回の操作は意味がない.
#include
using namespace std;
typedef long long ll;
ll r, g, b, w;
int main() {
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int t; cin >> t; while (t--) {
cin >> r >> g >> b >> w;
ll c = r + g + b + w;
int cnt = (r & 1) + (g & 1) + (b & 1);
if (cnt == 0 || cnt == 3)cout << "Yes" << endl;
else if(c & 1){
if (cnt == 2 && r && g && b)w += 3, cnt = 1;
if (cnt == 2) cout << "No
";
else if (w & 1) cout << "No
";
else cout << "Yes" << endl;
} else cout << "No" << endl;
}
}
1395B - Boboniu Plays Chess
仮定(f(i,j)=((i+Sx-2)modn+1,(j+Sy-2)mod(m+1)).iを1からnに反復します.iが奇数の場合、(f(i,1)、f(i,2),...,f(i,m))が印刷されます.そうでなければ(f(i,m),f(i,m-1),...,f(i,1))を印刷します.
#include
using namespace std;
const int maxn = 100;
int n, m, a, b;
bool row[maxn + 3], vis[maxn + 3][maxn + 3];
int main() {
scanf("%d %d %d %d", &n, &m, &a, &b);
for (int i = 1; i <= n; i++) {
if (i > 1) for (int j = 1; j <= n; j++) if (!row[j]) { a = j; break; }
row[a] = true;
printf("%d %d
", a, b);
vis[a][b] = true;
for (int j = 1; j < m; j++) {
for (int k = 1; k <= m; k++) if (!vis[a][k]) { b = k; break; }
printf("%d %d
", a, b);
vis[a][b] = true;
}
}
return 0;
}
1395C - Boboniu and Bit Operations
答えをAと仮定する.従って、全ての(i(1≦i≦n)について、c_i | A = A\). (a_i,b_i<2^9)のため、(0から2^9-1)のすべての整数を列挙し、各iに(j(ai&bj)|A=A)が存在するかどうかを確認することができます.一番少ないのは答えです.時間複雑度(O(2^9⋅n^2))
#include
#define ci const int&
using namespace std;
int n,m,p[210],d[210],ans;
bool Check(ci x){
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j)if(((p[i]&d[j])|x)==x)goto Next;
return 0;
Next:;
}
return 1;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)scanf("%d",&p[i]);
for(int i=1;i<=m;++i)scanf("%d",&d[i]);
ans=(1<<9)-1;
for(int i=8;i>=0;--i)Check(ans^(1<