B
题意:给出n个男孩,m个女孩,n个男孩的a[i],m个女孩的b[i],其中组成一队的条件是男孩女孩分别的值的差小于等于1,问能够组成多少对
先排序,再扫一遍,符合条件的就标记
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 int a[1005],b[1005],vis[1005]; 8 9 int main() 10 { 11 int n,i,j,m,ans=0,x,y; 12 scanf("%d",&n); 13 for(i=1;i<=n;i++) scanf("%d",&a[i]); 14 scanf("%d",&m); 15 for(i=1;i<=m;i++) scanf("%d",&b[i]); 16 sort(b+1,b+m+1); 17 sort(a+1,a+n+1); 18 memset(vis,0,sizeof(vis)); 19 20 for(i=1;i<=n;i++) 21 { 22 x=a[i]+1;y=a[i]-1; 23 for(j=1;j<=m;j++) 24 { 25 if(!vis[j]&&(x==b[j]||y==b[j]||a[i]==b[j])) 26 { 27 ans++; 28 vis[j]=1; 29 // printf("ans=%d ",ans); 30 // printf("a[%d]=%d ",i,a[i]); 31 32 break; 33 } 34 // 35 } 36 } 37 printf("%d ",ans); 38 39 }
补-----------------------------------------------------------------------------------------------------
A
题意:给出n个数,用交换的方式将它们排序,输出交换的次数以及交换的位置。
找的一份第一个提交的代码学习(看题解= =), 从前到后遍历,找到一个数能够交换到的最后的位置,如果这个位置和最初的位置不同,则放进vector容器中
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 8 vector<pair<int,int> >v; 9 int a[5005]; 10 11 int main() 12 { 13 int i,j,n,x; 14 scanf("%d",&n); 15 for(i=0;i<n;i++) scanf("%d",&a[i]); 16 for(i=0;i<n;i++) 17 { x=i; 18 for(j=i+1;j<n;j++) 19 { 20 if(a[j]<a[x]) x=j; 21 } 22 if(x!=i) {v.push_back(make_pair(i,x));swap(a[i],a[x]);} 23 } 24 printf("%d ",v.size()); 25 for(i=0;i<v.size();i++) 26 printf("%d %d ",v[i].first,v[i].second); 27 }
C
题意:给出一个数的长度m,给出各个位数的和n,求满足这个条件的最小的数和最大的数
先看最大的数,就尽量往高位放9,放完了就填0, 最小的数和最大的数类似,先将n-1(留一个1给最高位),尽量往低位放9,放完了就放0
这一题wa了好几次,因为没有考虑全情况,n在大于9*m的情况下,就无解了
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 int a[105],b[105]; 8 9 int main() 10 { 11 int m,n,i,j,c; 12 scanf("%d %d",&m,&n); 13 c=n; 14 if((m>1&&n==0)||(n>9*m)) printf("-1 -1 "); 15 else 16 { 17 for(i=m-1;i>=0;i--) 18 { 19 if(n>=9) a[i]=9; 20 else a[i]=n%9; 21 n=n-a[i]; 22 } 23 n=c-1; 24 for(i=0;i<m;i++) 25 { 26 if(n>=9) b[i]=9; 27 else b[i]=n%9; 28 n=n-b[i]; 29 } 30 31 b[m-1]=b[m-1]+1; 32 33 34 for(i=m-1;i>=0;i--) 35 printf("%d",b[i]); 36 printf(" "); 37 for(i=m-1;i>=0;i--) 38 printf("%d",a[i]); 39 printf(" "); 40 } 41 }