coderforce #677(div3)
A. Boring Apartments
略
B. Yet Another Bookshelf
题意:就是你将所有的1移动到一起所需要的步数
思路:将所有的1放到一起看两个之间的距离加起来就可以

#include<bits/stdc++.h> using namespace std; const int maxn=1e5+50; int t,a[maxn]; int main() { cin>>t; while(t--) { int n; cin>>n; vector<int>v; for(int i=0;i<n;++i) { cin>>a[i]; if(a[i]==1) v.push_back(i); } int sum=0; for(int i=1;i<v.size();++i) { sum+=v[i]-v[i-1]-1; } cout<<sum<<endl; } return 0; }
C. Dominant Piranha
题意:挑选一个数,如果比左边大可以吃掉左边,加1,同理右边。找到一个数能按照这个操作把所有的都吃掉
思路:找到一组数里面最大的哪一个,看他的左边和右边是否比他小,如果可以那么就记录下这个数据,最后再排序将第一个和maxx比较
如果相同,也是不可以的,输出pos就可以了

#include<bits/stdc++.h> using namespace std; const int maxn=3e5+50; int t,n,a[maxn]; int main() { cin>>t; while(t--) { cin>>n; int maxx=0,pos=-1; for(int i=1;i<=n;++i) { cin>>a[i]; } for(int i=1;i<=n;++i) { if(a[i]>=maxx) { maxx=a[i]; if(i<=n-1&&a[i]>a[i+1]) maxx=a[i],pos=i; if(i>=2&&a[i]>a[i-1]) maxx=a[i],pos=i; } } sort(a+1,a+n+1); //cout<<maxx<<endl; if(a[1]==maxx) { cout<<-1<<endl; } else cout<<pos<<endl; } return 0; }
D. Districts Connection
题意:构造一个连通图,将所有的边连接起来,但是边链接的两个点的值是不能相同的,问是否能构成图
思路:将最有一个与前面不相等的构造,如果有和最大的相等的数值,那么就用第一个去和他构造。如果所有的数都是相等的也是不可以的

#include<bits/stdc++.h> using namespace std; const int maxn=3e5+50; int t,n,a[maxn]; int main() { cin>>t; while(t--) { cin>>n; int maxx=0,pos=-1; for(int i=1;i<=n;++i) { cin>>a[i]; } for(int i=1;i<=n;++i) { if(a[i]>=maxx) { maxx=a[i]; if(i<=n-1&&a[i]>a[i+1]) maxx=a[i],pos=i; if(i>=2&&a[i]>a[i-1]) maxx=a[i],pos=i; } } sort(a+1,a+n+1); //cout<<maxx<<endl; if(a[1]==maxx) { cout<<-1<<endl; } else cout<<pos<<endl; } return 0; }
E. Two Round Dances
题意:将所有的人分为两组,然后围城一个圈跳舞
思路:刚开始题目看错了,所以导致就wa了很多次。将n个人分成两组跳舞的次数是C(n,n/2)/2,然后围成一圈的跳舞的次数为(n/2-1)!所以将两个相乘就可以得到答案了。

#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { ll n; cin>>n; ll c=1; for(ll i=n/2+1;i<=n;++i) { c*=i; } for(ll i=2;i<=n/2;++i) c/=i; c/=2; ll fac=1; for(int i=1;i<n/2;++i) fac*=i; cout<<c*fac*fac<<endl; return 0; }
F. Zero Remainder Sum(待补)
题意:给你个n*m的方阵,让你每一行选择两个数,使得他们的和能够整除m,问这个和最大是多少
思路:正解是个dp题目,然后我没有看懂,我看到有个人用的记忆化搜索,因为数据范围还是很小的,用记忆化搜索也是能做的