仔细看题。
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 }