• 2019CCPC-江西省赛(重现赛)


    1001

     

    1002

     

    1003

     

    1004

     

    1005

     

    1006 String (HDOJ 6572)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6572

    代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn=110;
    int n,cnt[4];
    char s[maxn];
    
    int main(){
        while(~scanf("%d",&n)){
            memset(cnt,0,sizeof(cnt));
            scanf("%s",s+1);
            for(int i=1;i<=n;i++){
                if(s[i]=='a') cnt[0]++;
                if(s[i]=='v') cnt[1]++;
                if(s[i]=='i') cnt[2]++;
                if(s[i]=='n') cnt[3]++;
            }
            int tmp1,tmp2;
            if(!cnt[0] || !cnt[1] || !cnt[2] || !cnt[3]){
                tmp1=0;
            }
            else{
                tmp1=cnt[0]*cnt[1]*cnt[2]*cnt[3];
            }
            tmp2=n*n*n*n;
            int tmp=__gcd(tmp1,tmp2);
            tmp1/=tmp,tmp2/=tmp;
            printf("%d/%d
    ",tmp1,tmp2);
        }
        return 0;
    } 
    View Code

     

    1007 Traffic (HDOJ 6573)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6573

    思路:枚举i和j,b[j]+x=a[i]是不可以的情况,标记此刻的x不可取,最后遍历看x能取的最小值

    代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn=1e5+10;
    int n,m;
    int a[maxn],b[maxn],cnt[maxn];
    
    int main(){
        while(~scanf("%d%d",&n,&m)){
            for(int i=1;i<=n;i++){
                scanf("%d",&a[i]);
            }
            for(int i=1;i<=m;i++){
                scanf("%d",&b[i]);
            }
            memset(cnt,0,sizeof(cnt));
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    if(a[i]-b[j]<0) continue;
                    cnt[a[i]-b[j]]++; 
                }
            }
            for(int i=0;i<=maxn;i++){
                if(cnt[i]==0){
                    printf("%d
    ",i);
                    break;
                }
            }
        }
        return 0;
    } 
    View Code

     

    1008 Rng (HDOJ 6574)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6574

    思路:打表

    代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    const int mod=1e9+7;
    ll n;
    
    ll quickpow(ll a,ll b){
        if(b<0) return 0;
        ll ret=1;
        a%=mod;
        while(b){
            if(b&1) ret=(ret*a)%mod;
            b>>=1;
            a=(a*a)%mod;
        }
        return ret;
    }
    
    ll inv(ll a){
        return quickpow(a,mod-2);
    }
    
    int main(){
        scanf("%lld",&n);
        ll ans=((n+1)*inv(2*n))%mod;
        printf("%lld
    ",ans);
        return 0;    
    } 
    View Code

     


    1009 Budget (HDOJ 6575)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6575

    题意:给出1e18范围内的小数,已经四舍五入到三位小数,求四舍五入到两位小数时失去的精度和

    思路:因为范围过大,直接乘1000会爆,用字符串读入,只保留小数点后的。

    代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    int n;
    char s[55];
    
    int main(){
        while(~scanf("%d",&n)){
            int ans=0;
            while(n--){
                scanf("%s",s);
                int len=strlen(s);
                int flag=0;
                for(int i=0;i<len;i++){
                    if(s[i]=='.'){
                        flag=i;
                        break;
                    }
                }
                int ss=0;
                for(int i=flag+1;i<len;i++){
                    ss=ss*10+s[i]-'0';
                }
                if(ss>=995) ans+=1000-ss;
                else{
                    int tmp=ss%10;
                    if(tmp>=5) ans+=10-tmp;
                    else ans-=tmp;
                } 
            }
            printf("%.3f
    ",(double)ans/1000.0);
        }
        return 0;
    }
    View Code

     

     


     

     

    1010 Worker (HDOJ 6576)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6576

    题意:给出n个工厂m个工人,每个工厂中每个人的产出为ai,要求每个工厂的总产出都相等,求问分配工人的方案

    思路:要使得每个工厂的总产出相等,相当于求每个工厂单人产出的最小公倍数,求出为了达到最小公倍数每个工厂最少要安排多少人k,判断总工人数是否是k的倍数。m的范围不是1018而是1e18

    代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    const int maxn=2020;
    int n;
    ll a[maxn],b[maxn],m;
    int cnt[15];
    
    int main(){
        while(~scanf("%d%lld",&n,&m)){
            memset(cnt,0,sizeof(cnt));
            for(int i=1;i<=n;i++){
                scanf("%lld",&a[i]);
                cnt[a[i]]=1;
            }
            int flag,tmp;
            ll sum;
            for(int i=1;i<=10;i++){
                if(cnt[i]!=0){
                    flag=i;
                    sum=i;
                    break;
                }
            }
            tmp=flag;
            for(int i=flag+1;i<=10;i++){
                if(cnt[i]==0) continue;
                tmp=__gcd(sum,(ll)i);
                sum=sum*i/tmp;
            }
        //    cout<<sum<<endl;
            ll kk=0;
            for(int i=1;i<=n;i++){
                b[i]=sum/a[i];
                kk+=b[i];
            }
            if(m%kk==0){
                ll tot=m/kk;
                printf("Yes
    ");
                for(int i=1;i<n;i++){
                    printf("%lld ",b[i]*tot);
                }
                printf("%lld
    ",b[n]*tot);
            }
            else{
                printf("No
    ");
            }
        }
        return 0;
    }
    View Code

     

     


     

    1011 Class  (HDOJ 6577)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6577

    代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    int x,y;
    
    int main(){
        scanf("%d%d",&x,&y);
        int a=(x+y)/2,b=(x-y)/2;
        printf("%d
    ",a*b);
        return 0;
    }
    View Code

     

  • 相关阅读:
    Ocaml入门(3)
    Delphi数组成员丢失
    Delphi合并2个动态数组
    Delphi用指针读取数组某个元素
    Delphi函数返回数组之TList函数返回
    Delphi函数返回数组之使用TList参数
    Delphi让函数返回数组
    Delphi双向链表
    Delphi指针与string
    Delphi函数指针,用于加载DLL
  • 原文地址:https://www.cnblogs.com/whdsunny/p/11232588.html
Copyright © 2020-2023  润新知