Educational Codeforces Round 41 (Rated for Div. 2)【A,B,C】

 仔细看题。

 1 #include<bits/stdc++.h>
 2  
 3 using namespace std;
 4 #define int long long
 5 #define inf 1000000090
 6 #define N 1000000
 7 int vis[N];
 8 signed main(){
 9     int n,m;
10     cin>>n>>m;
11     int maxn=0;
12     int minx=inf;
13     for(int i=0;i<m;i++){
14         int t;cin>>t;
15         minx=min(minx,t);
16         maxn=max(maxn,t);
17         vis[t]++;
18     }int ans=inf;
19     for(int i=1;i<=n;i++) {
20         ans=min(ans,vis[i]); 
21     }cout<<ans;
22     return 0;
23 }

 deque是个好东西啊!!

 1 #include<bits/stdc++.h>
 2  
 3 using namespace std;
 4 #define int long long
 5 #define inf 1000000090
 6 #define N 1000000
 7 struct str{
 8     int id;
 9     int num;
10 };
11 struct ST{
12     int ind;
13     int nbe;
14 }st[N];
15 int vis[N];
16 int arr[N];
17 deque<str> q;
18 signed main(){
19     int n,k;
20     cin>>n>>k;
21     for(int i=1;i<=n;i++) cin>>arr[i];
22     int ans=0;int cnt=0;
23     for(int i=1;i<=n;i++){
24         cin>>vis[i];
25         if(vis[i]){
26             ans+=arr[i];
27         }else{
28             st[cnt].ind=i;
29             st[cnt++].nbe=arr[i];
30         }
31     }
32     int maxn=0;int sum=0;
33     for(int i=0;i<=cnt;i++){
34     //    cout<<sum<<'\n';
35         q.push_back((str){st[i].ind,st[i].nbe});
36         if(abs(q.front().id-q.back().id)<=(k-1)){
37             sum+=q.back().num;
38             maxn=max(maxn,sum);
39         }else{
40             while(abs(q.front().id-q.back().id)>(k-1)){
41                 sum-=q.front().num; 
42                 q.pop_front();
43             }
44             sum+=q.back().num;
45             maxn=max(maxn,sum);
46         }
47     }
48 //    cout<<'\n';
49     cout<<maxn+ans;
50     return 0;
51 }

 题意:

【分析】
大概意思就是我的棋盘碎成了四块一样大小的n×n正方形碎片,其中n为奇数,而且棋盘碎片上的方格颜色也不太对。现在我要将四个碎片拼成一个完整的棋盘,按照常理,棋盘的颜色是黑白相间的,但是由于碎片的颜色不太对,所以我需要改变一些碎片上的方格的颜色。问:我需要至少改变多少个方格的颜色,才能将碎片拼成一个完整的棋盘。样例输入就是四片碎片的形态,其中0代表白色方格,1代表个黑色方格。在拼接的时候只能平移碎片,不能旋转、反转。
思路:暴力。枚举所有的情况。
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int arr1[666];
 4 int arr2[666];
 5 string mp[6666];
 6 int arr[666];
 7 int main(){
 8     for(int i=1;i<=4;i++) arr[i]=i;
 9     int n;
10     cin>>n;
11     for(int l=1;l<=4;l++){
12         for(int r=0;r<n;r++) cin>>mp[r];
13         getchar();
14         int sum1=0;
15         int sum2=0;
16         for(int i=0;i<n;i++){
17             for(int j=0;j<n;j++){
18                 if((i+j)%2==0){
19                     if(mp[i][j]=='0'){
20                         sum1++;
21                     }
22                 }else{
23                     if(mp[i][j]=='1'){
24                         sum1++;
25                     }
26                 }
27             }
28         }
29         for(int i=0;i<n;i++){
30             for(int j=0;j<n;j++){
31                 if((i+j)%2==0){
32                 if(mp[i][j]=='1'){
33                         sum2++;
34                     }    
35                         
36                 }else{
37                     if(mp[i][j]=='0'){
38                                 sum2++;
39                     }
40             }}
41         }
42         arr1[l]=sum1;arr2[l]=sum2;
43         
44     }
45     //for(int i=1;i<=4;i++) cout<<arr1[i]<<" "<<arr2[i]<<'\n';
46 //    cout<<"==";
47 
48     int ans=999999999;
49     do{
50         int add=0;
51         for(int i=1;i<=4;i++){
52         //    cout<<arr[i]<<" ";
53             if(arr[i]%2){
54                 add+=arr1[i];
55             }else{
56                 add+=arr2[i];
57             }
58         }//cout<<'\n';
59     //    cout<<add<<'\n';
60         ans=min(ans,add);    
61     }while(next_permutation(arr+1,arr+4+1));
62 //    cout<<"==";
63     cout<<ans;
64     return 0;
65 }

猜你喜欢

转载自www.cnblogs.com/pengge666/p/12189338.html