Codeforces Round #277.5 (Div. 2)

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 }
View Code

补-----------------------------------------------------------------------------------------------------

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 }
View Code

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 }
View Code
原文地址:https://www.cnblogs.com/wuyuewoniu/p/4305727.html