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 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 }
时间: 2024-10-07 06:32:42