1 (ac) 字符串的那个 MT MT
#include <bits/stdc++.h> using namespace std; string str; string head(string s){ int flag =0; for(int i = 0; i < s.length(); i++){ if(s[i] == 'M'){ flag = 1; } if(s[i] == 'T' && flag == 1){ return s.substr(i+1, s.length()); } } return s; } string rear(string s){ int flag =0; for(int i = s.length() - 1;i>=0 ;i--){ if(s[i] == 'T'){ flag = 1; } if(s[i] == 'M' && flag == 1){ return s.substr(0, i); } } return s; } int main(){ int n; cin>>n; cin>>str; cout<<rear(head(str))<<endl; return 0; }2 (ac) 优先级分配地区的题目
#include <bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; int a; vector<int>v1(n+1,0),v2; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cin>>a; if(!v1[a]){ v2.push_back(a); v1[a] = 1; j++; while(j<n){ cin>>a; j++; } } } } for(int i=0;i<n;i++){ cout<<v2[i]<<" "; } return 0; }3 (小美追小团的题目) 0.91
#include <bits/stdc++.h> using namespace std; struct node{ int id; node* son; }tree[50005]; int up[50005]; int down[50005]; int path[50005]; int x,y,len; bool find(int father,int id,int deep){ bool bo = false,isson = false; node*next = tree[id].son; up[id] = deep; while (next !=NULL){ if(next -> id == father){ next = next ->son; continue; } if(find(id,next->id,deep+1)){ len++; path[len] = id; isson = true; } if(down[next->id] + 1 > down[id]){ down[id] = down[next->id] +1; } bo = true; next = next->son; } if(bo == false) down[id] = 1; if(id == y || isson) return true; else return false; } int main(){ int i,j,k,n,m; node *next,*before; cin>>n>>x>>y; for(int i =0;i <= n; i++){ tree[i].id = i + 1; tree[i].son = NULL; up[i] = -1; down[i] = -1; } for(i =0;i<n-1;i++){ cin>>j>>k; next = tree[j].son; before = next; while(next !=NULL){ before = next; next = next->son; } next = new node; next ->id = k; next ->son = NULL; if(before == NULL) tree[j].son = next; else before ->son = next; next = tree[k].son; before = next; while (next !=NULL){ before = next; next = next->son; } next = new node; next->id = j; next ->son = NULL; if(before == NULL){ tree[k].son = next; } else{ before->son = next; } } len =0; path[0] = y; find(-1,x,1); k = up[path[0]] + down[path[0]]; for( i=0;i<=len/2;i++){ if(up[path[i]] + down[path[i]] > k){ k = up[path[i]] + down[path[i]]; } } cout<<k-2; }4 选择数据的 非降序子序列题目 暴力解决 0.64(没时间了,不知道暴力能不能全过)
#include <bits/stdc++.h> using namespace std; int a[100005]; int main(){ int m,n; cin>>m>>n; for(int i = 0; i < n; i++){ cin>>a[i]; } int pre = -1 ,flag = 1; int count =0; for(int i = 1;i <= m;i++){ for(int j = i; j <= m; j++){ pre = -1; flag = 1; for(int k = 0;k < n;k++){ if(a[k] >= i && a[k] <= j) continue; else{ if(a[k] >= pre){ pre = a[k]; } else{ flag = 0; break; } } } if(flag == 1) count ++; } } cout<<count<<endl; return 0; }5 复制粘贴的题目 ac
#include <bits/stdc++.h> using namespace std; int a[2005]; int b[2006]; int main(){ int i,j,k,m,n; int x,y; char ch[25]; cin>>n; for(i = 1; i <= n;i++){ cin>>a[i]; b[i] = -1; } cin>>m; gets(ch); for( i = 0;i< m ;i++){ memset(ch,0,sizeof(ch)); gets(ch); k =0; if(ch[0] == '1'){ sscanf(ch,"%d %d %d %d",&j,&k,&x,&y); while(k > 0){ b[y] = a[x]; k--; x++; y++; } } else{ sscanf(ch,"%d %d",&j,&k); cout<<b[k]<<endl; } } return 0; }
全部评论
(2) 回帖