2016年天梯赛决赛题集
L1:
-
-
#include<iostream> using namespace std; string s="I Love GPLT"; int main() { for(int i=0;i<s.size();i++) { cout<<s[i]<<endl; } return 0; }
-
模拟就完事了
#include<iostream> #include<set> #include<vector> using namespace std; string s; set<char> arr; char a[13]; vector<int> ans; int main() { getline(cin,s); for(int i=0;i<s.size();i++) arr.insert(s[i]); cout<<"int[] arr = new int[]{"; int size=arr.size(),cnt=0; for(set<char>::reverse_iterator it=arr.rbegin();it!=arr.rend();it++) { a[cnt++]=*it; if(cnt<size) cout<<*it<<","; else cout<<*it; } cout<<"};"<<endl; for(int i=0;i<s.size();i++) { for(int j=0;j<cnt;j++) { if(s[i]==a[j]) {ans.push_back(j);break;} } } cout<<"int[] index = new int[]{"; int cnt2=0; for(int i=0;i<ans.size();i++) { cnt2++; if(cnt2==s.size())cout<<ans[i]; else cout<<ans[i]<<","; } cout<<"};"; return 0; }
-
#include<iostream> #include<cmath> using namespace std; int n,x; int f(int n) { int flag=1; if(n==1) return 0; if(n==2) return 1; for(int i=2;i<=int(sqrt(n));i++) { if(n%i==0) { flag=0; break; } } return flag; } int main() { cin>>n; while(n--) { cin>>x; if(f(x)) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }
-
#include<iostream> #include<stdio.h> using namespace std; int h; float res; int main() { cin>>h; res=(h-100)*0.9*2; printf("%.1f",res); return 0; }
-
#include<iostream> #include<vector> using namespace std; int n; struct student{ int sex,vis; string name; }; vector<student> a(51); int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i].sex>>a[i].name; a[i].vis=0; } for(int i=1;i<=n;i++) { if(!a[i].vis) { a[i].vis=1; if(a[i].sex==0) { int j=n; while(a[j].sex==0 || a[j].vis) j--; a[j].vis=1; cout<<a[i].name<<" "<<a[j].name<<endl; } if(a[i].sex==1) { int j=n; while(a[j].sex==1 || a[j].vis) j--; a[j].vis=1; cout<<a[i].name<<" "<<a[j].name<<endl; } } } return 0; }
-
#include<iostream> #include<cmath> using namespace std; int n,h,w; int main() { cin>>n; while(n--) { cin>>h>>w; float calw=(h-100)*0.9*2; float dif=abs(calw-w); if(dif<calw*0.1) cout<<"You are wan mei!"<<endl; else if(w>calw) cout<<"You are tai pang le!"<<endl; else cout<<"You are tai shou le!"<<endl; } return 0; }
-
投机取巧一下:reverse 函数和 resize 函数!!!
#include<iostream> #include<algorithm> using namespace std; string s; char ch; int n; int main() { cin>>n>>ch; getchar(); getline(cin,s); reverse(s.begin(),s.end()); s.resize(n,ch); reverse(s.begin(),s.end()); cout<<s<<endl; return 0; }
L2:
-
典型的连通块问题 ,深搜直接搞定
#include<iostream> #include<string.h> using namespace std; int n,m,k,x,y; int g[501][501],vis[501]; void dfs(int x) { vis[x]=1; for(int i=0;i<n;i++) { if(!vis[i] && g[x][i]) { dfs(i); } } } int sovle() { memset(vis,0,sizeof(vis)); int cnt=0; for(int i=0;i<n;i++) { if(!vis[i]) { dfs(i); cnt++; } } return cnt; } int main() { cin>>n>>m; for(int i=0;i<m;i++) { cin>>x>>y; g[x][y]=1; g[y][x]=1; } int c=sovle(); cin>>k; for(int i=0;i<k;i++) { cin>>x; for(int i=0;i<n;i++) { if(g[x][i]) { g[x][i]=0; g[i][x]=0; } } int temp=sovle(); if((temp-1)>c) printf("Red Alert: City %d is lost!\n",x); else printf("City %d is lost.\n",x); c=temp; } if(k==n) printf("Game Over.\n"); return 0; }
-
最长上升子序列 (LIS) 的变形应用?
-
互评成绩
⚠️ 错误答案,有一个样例过不了
#include<iostream> #include<algorithm> #include<string.h> #include<stack> using namespace std; int n,k,m,x; double a[10001]; int g[10]; stack<double> s; int cmp(int a,int b) { return a>b; } int main() { cin>>n>>k>>m; for(int i=1;i<=n;i++) { double sum=0; for(int j=0;j<k;j++) cin>>g[j]; sort(g,g+k); for(int j=1;j<k-1;j++) sum+=g[j]; a[i]=sum/(k-2); } sort(a+1,a+1+n,cmp); for(int i=1;i<=m;i++) s.push(a[i]); int cnt=0,size=s.size(); while(!s.empty()) { cnt++; double ret=s.top(); s.pop(); if(cnt<size) printf("%.3lf ",ret); else printf("%.3lf",ret); } return 0; }
-
L3:
老规矩,ACMER 里面请!