待补
A
#include <bits/stdc++.h>
using namespace std;
int n;
int main()
{
int __;
scanf("%d", &__);
while(__ -- )
{
scanf("%d", &n);
if(n == 1) printf("0
");
else if(n == 2) printf("1
");
else if(n == 3) printf("2
");
else if(n % 2 == 0) printf("2
");
else printf("3
");
}
return 0;
}
B
#include <bits/stdc++.h>
using namespace std;
const int N = 100 + 20;
int n, q;
char str[N];
int main()
{
int __;
scanf("%d", &__);
while(__ -- )
{
scanf("%d%d", &n, &q);
scanf("%s", str + 1);
while(q -- )
{
int l, r;
scanf("%d%d", &l, &r);
int flag = 0;
for(int i = 1; i < l; ++ i)
if(str[i] == str[l])
flag = 1;
for(int i = r + 1; i <= n; ++ i)
if(str[i] == str[r])
flag = 1;
if(flag) printf("YES
");
else printf("NO
");
}
}
return 0;
}
C
#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 10;
int n, k;
char a[N], b[N];
int ca[30], cb[30];
int main()
{
int __;
scanf("%d", &__);
while(__ -- )
{
for(int i = 0; i < 26; ++ i)
ca[i] = cb[i] = 0;
scanf("%d%d", &n, &k);
scanf("%s%s", a + 1, b + 1);
for(int i = 1; i <= n; ++ i) ca[a[i] - 'a'] ++;
for(int i = 1; i <= n; ++ i) cb[b[i] - 'a'] ++;
int flag = 0;
for(int i = 0; i < 26; ++ i)
{
if(ca[i] < cb[i]) { flag = 1; break;}
if((ca[i] - cb[i]) % k == 0)
ca[i + 1] = ca[i + 1] + ca[i] - cb[i];
else {flag = 1; break;}
}
if(flag) puts("No");
else puts("Yes");
}
return 0;
}
D
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL d, k;
int main()
{
int __;
scanf("%d", &__);
while(__ -- )
{
scanf("%lld%lld", &d, &k);
LL x = 0, y = 0, res = 0;
while(x * x + y * y <= d * d)
{
if(x < y) x += k;
else y += k;
res ++;
}
if(res % 2 == 0) puts("Ashish");
else puts("Utkarsh");
}
return 0;
}
E1/E2
#include <bits/stdc++.h>
using namespace std;
const int N = 1 << 17;
int n, v[N], from[N], a[N];
int query(int op, int i, int j)
{
if(op == 1) printf("AND");
if(op == 2) printf("XOR");
printf(" %d %d
", i, j); fflush(stdout);
int x;
scanf("%d", &x);
return x;
}
void print()
{
printf("!");
for(int i = 1; i <= n; ++ i) printf(" %d", a[i]);
puts("");
}
void f(int x, int y)
{
a[x] = a[y] = query(1, x, y);
a[1] = v[x] ^ a[x];
for(int i = 2; i <= n; ++ i)
a[i] = a[1] ^ v[i];
print();
}
void g(int x, int y)
{
int v1 = query(1, 1, x);
int v2 = query(1, 1, y);
for(int i = 0; i < 16; ++ i)
{
int u = 0;
if(i == 0) u = (v2 >> i) & 1;
else u = (v1 >> i) & 1;
a[1] |= u << i;
for(int j = 2; j <= n; ++ j)
a[j] |= (u ^ ((v[j] >> i) & 1)) << i;
}
print();
}
int main()
{
scanf("%d", &n);
for(int i = 2; i <= n; ++ i) v[i] = query(2, 1, i);
for(int i = 2; i <= n; ++ i)
if(!v[i]) { f(1, i); return 0; }
for(int i = 2; i <= n; ++ i)
if(!from[v[i]]) from[v[i]] = i;
else { f(from[v[i]], i); return 0; }
g(from[1], from[2]);
return 0;
}
2020.11.23