Codeforces Round #599 (Div. 2)(A-D)
A. Maximum Square
题意:找最大的正方形边长
解:排序,贪心
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=1e5+10; int a[MAXN]; bool cmp(int x,int y){return x>y;} int main(){ int T; cin>>T; while(T--){ int n; cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+1+n,cmp); int ans=0; for(int i=1;i<=n;i++){ ans++; if(a[i]>=ans)continue; else { ans--; break; } } cout<<ans<<endl; } return 0; }
B1. Character Swap (Easy Version)
题意:给两个字符串s和t,只能进行一次操作:交换s[i]和t[j]是否使得两个字符串相等。
解:1.两个字符串相同输出yes
2.两个字符串有一个位置不相同输出no
3.两个字符串有两个位置不相同,判断是否能根据交换来使得两个字符串相同
4.超过两个位置不相同,一定是不能够进行一次操作使得两个字符串相等
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN=1e5+10; int a[30]; int b[30]; char s[MAXN]; char t[MAXN]; int main(){ int T; cin>>T; while(T--){ for(int i=0;i<30;i++)a[i]=0; for(int i=0;i<30;i++)b[i]=0; int n; cin>>n; cin>>s>>t; char ss; char tt; int cnt=0; bool ok=false; for(int i=0;i<n;i++){ if(s[i]!=t[i]&&!cnt){ ss=s[i]; tt=t[i]; cnt++; } else if(s[i]!=t[i]&&cnt==1){ if(ss==s[i]&&tt==t[i])ok=true,cnt++; else break; }else if(s[i]!=t[i]){ cnt++; break; } } if(cnt==0||(ok&&cnt==2))cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }