首页 > 其他 > 详细

Codeforces Round #582 (Div. 3)题解

时间:2019-09-16 20:28:21      阅读:119      评论:0      收藏:0      [点我收藏+]

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!