A题:
题意:给定一些数,然后每两个组成一对,要求每对的和的大小相同,输出这样的组合
分析:直接模拟就行

1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 const int maxn=110; 15 int a[maxn]; 16 int n; 17 int vis[maxn]; 18 int main() 19 { 20 while(cin>>n) 21 { 22 int sum=0; 23 for(int i=1;i<=n;i++) 24 { 25 cin>>a[i]; 26 sum+=a[i]; 27 } 28 memset (vis,0,sizeof(vis)); 29 int ave=n/2; 30 int num=sum/ave; 31 for(int i=1;i<=n;i++){ 32 if(!vis[i]){ 33 for(int j=1;j<=n;j++){ 34 if(!vis[j]&&j!=i){ 35 if(a[i]+a[j]==num){ 36 vis[i]=1; vis[j]=1; 37 cout<<i<<" "<<j<<endl; 38 break; 39 } 40 } 41 } 42 }else continue; 43 } 44 } 45 return 0; 46 }
B题:
题意:给定n*n的方格,有m个操作,每个操作给定两个坐标系x,y,去掉x行和y列,问每一步操作之后剩下多少
分析:每一步操作就是(n-当前被去掉的行)*(n-当前被去掉的列)

1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 const int maxn=100010; 15 long long d[maxn]; 16 long long n,m; 17 //int visrow[maxn],viscol[maxn]; //行和列 18 int main() 19 { 20 while(cin>>n>>m) 21 { 22 memset(d,0,sizeof(d)); 23 set<long long > row; //行 24 set<long long> col; //列 25 long long cnt=n*n; 26 for(int i=0;i<m;i++) 27 { 28 long long x,y; 29 cin>>x>>y; 30 row.insert(x); 31 col.insert(y); 32 int num1=row.size(); 33 int num2=col.size(); 34 long long sum=(n-num1)*(n-num2); 35 d[i]=sum; 36 } 37 for(int i=0;i<m-1;i++){ 38 cout<<d[i]<<" "; 39 } 40 cout<<d[m-1]<<endl; 41 } 42 return 0; 43 }
C题:
题意:求包含所有字母的最短子串长度
分析:对于尚未取到所有字母的位置,不断更新,对于取到了所有字母的位置,用最大位置的减去最小位置,然后去最小值

1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <string> 5 #include <vector> 6 #include <algorithm> 7 #include <set> 8 #include <map> 9 #include <bitset> 10 #include <cmath> 11 #include <queue> 12 #include <stack> 13 using namespace std; 14 const int maxn=110; 15 const int INF=1<<20; 16 int vis[maxn]; 17 int vis1[maxn],pos[maxn]; 18 string s; 19 int n; 20 int main() 21 { 22 cin>>n; 23 cin>>s; 24 // 25 memset(vis,0,sizeof(vis)); 26 string match; 27 for(int i=0;i<n;i++){ 28 if(!vis[s[i]-'A']){ 29 match+=s[i]; 30 vis[s[i]-'A']=1; 31 } 32 } 33 //cout<<match<<endl; 34 35 int len=match.length(); 36 int flag=0; 37 //int vis1[maxn]; 38 //int pos[maxn]; 39 int minx=INF; 40 memset(vis1,0,sizeof(vis1)); 41 memset(pos,-1,sizeof(pos)); 42 for(int i=0;i<n;i++) 43 { 44 for(int j=0;j<len;j++){ 45 if(s[i]==match[j]){ 46 vis1[j]=1; 47 pos[j]=i; break; 48 } 49 } 50 int cnt=0; 51 for(int j=0;j<len;j++){ 52 if(flag) break; 53 else{ 54 if(vis1[j]) cnt++; 55 } 56 } 57 if(cnt==len){ 58 flag=1; 59 } 60 if(flag){ 61 int mix=pos[0],maxx=pos[0]; 62 for(int j=1;j<len;j++){ 63 if(pos[j]<mix) 64 mix=pos[j]; 65 else if(pos[j]>maxx) 66 maxx=pos[j]; 67 } 68 int t=maxx-mix; 69 minx=min(t,minx); 70 } 71 } 72 cout<<minx+1<<endl; 73 return 0; 74 }