Codeforces Round #685 (Div. 2)
传送门(点击传送)
之后会补全题意和思路
A. Subtract or Divide
题意:
思路:
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t,n,ans;
cin>>t;
while(t--){
cin>>n;
if(n==1) cout<<0<<endl;
else if(n==2) cout<<1<<endl;
else if(n==3) cout<<2<<endl;
else if(n%2==0){
cout<<2<<endl;
}else{
cout<<3<<endl;
}
}
return 0;
B. Non-Substring Subsequence
题意:
思路:
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=105;
bool left_z[N],left_o[N],right_z[N],right_o[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t,n,q,l,r;
string s;
cin>>t;
while(t--){
cin>>n>>q>>s;
bool one=false,zero=false;
for(int i=0;i<n;i++){
left_z[i]=zero;
left_o[i]=one;
if(s[i]=='1') one=true;
if(s[i]=='0') zero=true;
}
one=false,zero=false;
for(int i=n-1;i>=0;i--){
right_z[i]=zero;
right_o[i]=one;
if(s[i]=='1') one=true;
if(s[i]=='0') zero=true;
}
for(int i=1;i<=q;i++){
bool ans=false;
cin>>l>>r;
l--;r--;
if(s[l]=='0') ans|=left_z[l];
if(s[l]=='1') ans|=left_o[l];
if(s[r]=='0') ans|=right_z[r];
if(s[r]=='1') ans|=right_o[r];
if(ans) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
return 0;
}
C. String Equality
题意:
思路:
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int cont1[30],cont2[30];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int t,n,k;
string s1,s2;
cin>>t;
while(t--){
cin>>n>>k;
cin>>s1>>s2;
memset(cont1,0,sizeof(cont1));
memset(cont2,0,sizeof(cont2));
for(int i=0;i<n;i++){
cont1[s1[i]-'a'+1]++;
cont2[s2[i]-'a'+1]++;
}
for(int i=1;i<=26;i++){
int minn=min(cont1[i],cont2[i]);
cont1[i]-=minn;
cont2[i]-=minn;
}
bool ans=true;
for(int i=1;i<=26;i++){
if(cont1[i]%k!=0){
ans=false;
break;
}
int cont=cont1[i]/k;
for(int j=i;j<=26;j++){
if(cont2[j]>=k){
int cost=cont2[j]/k;
int minn=min(cost,cont);
cont2[j]-=minn*k;
cont-=minn;
}
}
if(cont>0){
ans=false;
break;
}
}
if(ans) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
D. Circle Game
题意:
思路:
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
ll t,d,k;
cin>>t;
while(t--){
cin>>d>>k;
ll l=0,r=d/k*2;
while(l<r){
ll mid=(l+r+1)>>1;
if((mid*k)*(mid*k)+(mid*k)*(mid*k)<=d*d){
l=mid;
}else{
r=mid-1;
}
}
if((l*k+k)*(l*k+k)+l*k*l*k>d*d){
cout<<"Utkarsh"<<endl;
}else{
cout<<"Ashish"<<endl;
}
}
return 0;
}
E1. Bitwise Queries (Easy Version)
题意:
思路:
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int num[100005],ans[100005];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int n,and12,and13,and23;
cin>>n;
for(int i=2;i<=n;i++){
cout<<"XOR 1 "<<i<<endl;
fflush(stdout);
cin>>num[i];
}
cout<<"AND 1 2"<<endl;
fflush(stdout);
cin>>and12;
cout<<"AND 1 3"<<endl;
fflush(stdout);
cin>>and13;
cout<<"AND 2 3"<<endl;
fflush(stdout);
cin>>and23;
int he12,he13,he23;
he12=num[2]+2*and12;
he13=num[3]+2*and13;
he23=(num[2]^num[3])+2*and23;
ans[1]=(he12+he13-he23)/2;
cout<<"! "<<ans[1];
for(int i=2;i<=n;i++){
ans[i]=num[i]^ans[1];
cout<<" "<<ans[i];
}
cout<<endl;
fflush(stdout);
return 0;
}