码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces#364Div2

时间:2016-07-24 01:48:05      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

 

Codeforces#364Div2

标签:

原文地址:http://www.cnblogs.com/wolf940509/p/5699940.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!