欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

CodeforcesGlobalRound19A-D

时间:2023-06-05

过年快玩吐了,来场cf吧
A、Sorting Parts
题目很绕口,直接出结论就行。sort,如果初始给出的数组是升序的就输出no,其他情况都是yes。

#include #define endl 'n'using namespace std;typedef long long ll;int a[10001],b[10001];int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int t,n,i,j; cin>>t; while(t--) { cin>>n; for(i=0;i>a[i]; b[i]=a[i]; } sort(a,a+n); int f=0; for(i=0;i

B、MEX and Array
题意自己读吧,我虽然ac了但是没有完全读懂题意。。。
硬推样例推出来的公式,对数组按长度1 - n分别划分情况,对于每种情况答案就是按照题目所给的公式将所有元素都分开去算,最后将每次计算的结果都加起来。

#include #define endl 'n'using namespace std;typedef long long ll;int a[101];int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int t,n,i,j; cin>>t; while(t--) { cin>>n; for(i=0;i>a[i]; } ll ans=0; int p; for(i=1;i<=n;i++) { p=0; while(pn) break; ans=ans+i; for(j=p;j C、Andrew and Stones
有n堆石块,要将中间所有的石块都移到两边,移动方法为对于i 想复杂了,其实就是特判。这个移动方法变相的说就是两边的石子不能移动,中间的石子可以任意移动到两边。因此只有除了两边中间所有的石子堆数量全是1的时候才是-1(只要某个石子堆的数量大于等于2,它就能移出1来,循环下去把所有的奇数石子全移动到两边)当然不要忘了n=3的情况,只要中间是奇数答案就是-1。当可以求出答案时,最小移动次数其实就是对于所有奇数堆+1,偶数堆不动,然后全除2加起来就行了。

#include #define endl 'n'using namespace std;typedef long long ll;int a[100001];int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int t,n,i,j; cin>>t; while(t--) { cin>>n; for(i=0;i>a[i]; } ll ans=0; if(n==3) { if(a[1]%2!=0) cout<<"-1"< D、Yet Another Minimization Problem
给出a和b的数组,可以交换ai和bi,给出cost公式,输出经过交换后cost的最小值。
公式一看就很麻烦,需要推一下公式。麻烦的公式推完后发现实际上就是交换ai和bi,求ai和的平方+bi和的平方的最小值和另一个式子(这个式子和交换没有关系,它的值不会变)。
首先求出ai和bi的和sum,用sum作为01背包的容量求出交换可以产生的情况,再列一个循环求出可以交换的情况中的最小值即可。

#include #define endl 'n'using namespace std;typedef long long ll;int a[101],b[101],dp[101][20001];int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int t,n,i,j; cin>>t; while(t--) { cin>>n; memset(dp,0,sizeof(dp)); ll ans=0,sum=0; for(i=1; i<=n; i++) { cin>>a[i]; ans=ans+a[i]*a[i]*(n-2); sum=sum+a[i]; } for(i=1; i<=n; i++) { cin>>b[i]; ans=ans+b[i]*b[i]*(n-2); sum=sum+b[i]; } if(n==1) { cout<<"0"<=a[i]&&dp[i-1][j-a[i]]) dp[i][j]=1; if(j>=b[i]&&dp[i-1][j-b[i]]) dp[i][j]=1; } for(i=0; i<=sum; i++) { if(dp[n][i]) ans1=min(ans1,i*i+(sum-i)*(sum-i)); } cout<

.
.
.
d没有自己做出来,前三题的罚时也很高。枯了,我什么时候才能站起来。。。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。