码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #582 (Div. 3)

时间:2019-08-31 14:43:54      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:force   cin   div   while   bad   价格   print   namespace   lld   

A Chips Moving

传送门
就是一堆木块,你需要做的是把某个木块±2或者±1,但是±1需要硬币。使得最后全部数相同
分析发现,所以奇数可以通过±2得到相同,所有偶数也是,所以,最后只要把奇数或偶数变成一样的数即可,那么也就是求奇数和偶数的最小个数。

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
    int n;
    cin>>n;
    int e=0,o=0;
    while(n--){
        int x;
        cin>>x;
        if(x&1)o++;
        else e++;
    }
    printf("%d\n",min(o,e));
    return 0;
}

B Bad Prices

传送门
bad price 是指如果第天的价格是a,那么之后的价格如果小于a,那么第i的价格a就是bad price
我们选择的方法是从后面开始记录,不断更新最小值,然后如果该天的价格大于当前最小值,那么就是一个bad price

#include <iostream>
#include <cstdio>
#define ll long long
#define il inline
using namespace std;
const int N=150005;
inline ll read(){
    char ch=getchar();ll x=0,f=1;
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int main(){
    ll t;
    cin>>t;
    while(t--){
        ll n;
        scanf("%lld",&n);
        ll a[N];
        for(int i=0;i<n;i++){
            scanf("%lld",&a[i]);
        }

        int ans=0;
        int minn=1e6+5;
        for(int i=n-1;i>=0;i--){
            if(a[i]>minn){
                ans++;
            }else{
                minn=a[i];
            }
        }

        printf("%d\n",ans);

    }
    return 0;
}

C Book Reading

传送门

方法一

利用数字的特点,因为数字太大,枚举是不可能的。但是只需要把[1,n]里所有m的倍数的个位数相加即可,那么只需要找出所有个位数的规律,以及有几个m的倍数属于[1,n]

#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
ll a[]={2,4,6,8,0};
ll b[]={3,6,9,2,5,8,1,4,7,0};
ll c[]={4,8,2,6,0};
ll d[]={5,0};
ll e[]={6,2,8,4,0};
ll f[]={7,4,1,8,5,2,9,6,3,0};
ll g[]={8,6,4,2,0};
ll h[]={9,8,7,6,5,4,3,2,1,0};
ll j[]={1,2,3,4,5,6,7,8,9};
int main(){
    int t;
    cin>>t;
    while(t--){
        ll n,m;
        cin>>n>>m;
        ll sum=0;
        ll x=n/m;
        switch(m%10){
            case 1: sum=45*(x/10);for(int i=0;i<x%10;i++)sum+=j[i];break;
            case 2: sum=20*(x/5);for(int i=0;i<x%5;i++)sum+=a[i];break;
            case 3: sum=45*(x/10);for(int i=0;i<x%10;i++)sum+=b[i];break;
            case 4: sum=20*(x/5);for(int i=0;i<x%5;i++)sum+=c[i];break;
            case 5: sum=5*(x/2);for(int i=0;i<x%2;i++)sum+=d[i];break;
            case 6: sum=20*(x/5);for(int i=0;i<x%5;i++)sum+=e[i];break;
            case 7: sum=45*(x/10);for(int i=0;i<x%10;i++)sum+=f[i];break;
            case 8: sum=20*(x/5);for(int i=0;i<x%5;i++)sum+=g[i];break;
            case 9: sum=45*(x/10);for(int i=0;i<x%10;i++)sum+=h[i];break;
        }

        printf("%lld\n",sum);
    }
    return 0;
}

方法二:

Codeforces Round #582 (Div. 3)

标签:force   cin   div   while   bad   价格   print   namespace   lld   

原文地址:https://www.cnblogs.com/Emcikem/p/11438781.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!