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