2020.06.09——习题训练五
作者:互联网
前N个奇数和为N^2,所以说,当N小于K^2时即为不满足条件。再判断一下特殊情况就行。
#include<bits/stdc++.h> using namespace std; int t ; int main(){ scanf("%d",&t); while(t--){ int n,k; cin>>n>>k; if(n%2==k%2){ if(k==1&&n%2==0) cout<<"NO"<<endl; if((n/k)<k) cout<<"NO"<<endl; else cout<<"YES"<<endl; } else{ cout<<"NO"<<endl; } } return 0; }
直接找没有配对的人就行,如果都配对了,就没有配对情况。
#include<bits/stdc++.h> using namespace std; const int MAXN=1e5+7; int t; int main(){ scanf("%d",&t); while(t--){ int n,a[MAXN],b[MAXN]; memset(a,0,sizeof(a)); map<int,int> mp; cin>>n; for(int i =1;i<=n;i++) mp[i]=0; for(int p=1;p<=n;p++){ int k; bool flag=true; cin>>k; for(int i =1;i<=k;i++){ int tmp; cin>>tmp; if(mp[tmp]==0&&flag){ a[p]=tmp; mp[tmp]=1; flag=false; } } } int ans1=0,ans2=0; for(int i =1;i<=n;i++){ if(a[i]==0&&!ans1) ans1=i; if(mp[i]==0&&!ans2) ans2=i; } if(ans1){ cout<<"IMPROVE"<<endl; cout<<ans1<<" "<<ans2<<endl; } else cout<<"OPTIMAL"<<endl; } return 0; }
想麻烦了,直接输出就行……
#include<bits/stdc++.h> using namespace std; const int MAXN=1e5+7; int t; struct wm{ int k; map<int,int> mp; }g[MAXN]; int main(){ scanf("%d",&t); while(t--){ int n; cin>>n; cout<<"1 "<<n-1<<endl; } return 0; }
D - CopyCopyCopyCopyCopy
找不同的数,其实用map好一点。
#include<bits/stdc++.h> using namespace std; const int MAXN=1e5+7; int t; int main(){ scanf("%d",&t); while(t--){ int n; cin>>n; int tmp,ans=0; map<int,int> mp; for(int i =1;i<=n;i++){ cin>>tmp; if(mp[tmp]==0){ mp[tmp]=1; ans++; } } cout<<ans<<endl; } return 0; }
F - Yet Another Tetris Problem
一共就两个判断点,不能同时有偶和奇数。
#include<bits/stdc++.h> using namespace std; const int MAXN=1e5+7; int t; int main(){ scanf("%d",&t); while(t--){ int n,flag1=0,flag2=0; cin>>n; while(n--){ int tmp; cin>>tmp; if(tmp%2==0) flag1=1; if(tmp%2) flag2=1; } if(flag1&&flag2) cout<<"NO"<<endl; else cout<<"YES"<<endl; } return 0; }
G - Yet Another Palindrome Problem
又想麻烦了,直接找到两个相同的数字中间是否为空就行。
#include<bits/stdc++.h> using namespace std; const int MAXN=1e5+7; int t; int main(){ scanf("%d",&t); while(t--){ int n, a[MAXN],l,r,res[MAXN],flag=0; memset(res,1,sizeof(res)); cin>>n; for(int i =0;i<n;i++) cin>>a[i]; int len=0; for(int i =0;i<n;i++){ for(int j = n-1;j>i+1;j--){ // cout<<i<<" "<<j<<endl; if(a[i]==a[j]){ flag=1; break; } } if(flag) break; } // cout<<len<<endl; if(flag) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
总要往右跳,直接找R就行。
#include<bits/stdc++.h> using namespace std; const int MAXN=1e5+7; int t; int main(){ scanf("%d",&t); while(t--){ string ss; int d=1,ans=-1; cin>>ss; for(int i =ss.length()-1;i>=0;i-- ){ if(ss[i]=='R'){ ans=max(d,ans); d=1; } else d++; } ans=max(d,ans); cout<<ans<<endl; } return 0; }
标签:tmp,int,09,cin,2020.06,while,MAXN,习题,include 来源: https://www.cnblogs.com/aixiaodezsh/p/13114516.html