A. Chips Moving
统计奇偶输出小的那一个就行。
#include<bits/stdc++.h> #define ll long long using namespace std; int a,b,n,p; int main() { while(~scanf("%d",&n)){ a=b=0; while(n--){ scanf("%d",&p); if(p&1){ a++; } else{ b++; } } printf("%d\n",min(a,b)); } return 0; }
B. Bad Prices
从后开始记录最小值,扫一遍即可
#include<bits/stdc++.h> #define ll long long using namespace std; int t,n,a[150010],mi,sum; int main() { while(~scanf("%d",&t)){ while(t--){ scanf("%d",&n); sum=0; for(int i=1; i<=n; i++){ scanf("%d",&a[i]); } mi=a[n]; for(int i=n-1; i>=1; i--){ if(a[i]>mi){ sum++; } else{ mi=a[i]; } } printf("%d\n",sum); } } return 0; }
C. Book Reading
根据n找到一个循环,通关循环计算就行。
#include<bits/stdc++.h> #define ll long long using namespace std; ll p,n,m,q[15]; int main() { while(~scanf("%lld",&p)){ while(p--){ scanf("%lld %lld",&m,&n); if(n%10==0){ printf("0\n"); continue; } ll sum1=0; int e=1; q[1]=n%10; while(q[e]!=q[1]||e==1){ e++; q[e]=(q[e-1]+n)%10; } for(int i=1;i<e;i++){ sum1+=q[i]; } ll a=m/n; ll sum=0; sum=(a/(e-1))*sum1; for(int i=1;i<=(a%(e-1));i++){ sum+=q[i]; } printf("%lld\n",sum); } } return 0; }
D1&D2. Equalizing by Division
把数据读入后,sort排序一下,然后记录到每到每个数的步数和到每个数的数量,等于k的时候更新最小值。
#include<bits/stdc++.h> #define ll long long using namespace std; int s[200010],b[200010],n,k,mi,p[200010],d; int main() { while(~scanf("%d%d",&n,&k)){ mi=INT_MAX; memset(s,0,sizeof(s)); memset(b,0,sizeof(b)); for(int i=0;i<n;i++){ scanf("%d",&p[i]); } sort(p,p+n); for(int i=0;i<n;i++){ d=-1; while(p[i]){ s[p[i]]++; d++; b[p[i]]+=d; if(s[p[i]]==k){ mi=min(mi,b[p[i]]); } p[i]/=2; } } printf("%d\n",mi); } return 0; }
Codeforces Round #582 (Div. 3)题解
原文:https://www.cnblogs.com/daidaidaidai/p/11529543.html