2019牛客暑期多校训练营(第六场)

#include<bits/stdc++.h>
 
using namespace std;
double f1;
char s[2020],t[300];
int f[10000],k,a[100];
int main()
{
    int T;
    scanf("%d",&T);
    while (T--)
    {
        memset(f,0,sizeof(f));memset(a,0,sizeof(a));
        k++;
        printf("Case #%d: ",k);
        scanf("%s",s);
        scanf("%s",t);
        for (int i=0; i<26; i++)
        {
            if (t[i]=='h') f[i]=1;
            if (t[i]=='d') f[i]=2;
            if (t[i]=='w') f[i]=3;
        }
        int len=strlen(s);
        for (int i=0; i<len; i++)
        {
            a[f[s[i]-'a']]++;
        }
        f1=a[1]*1.0/len;
        if (f1>=0.25)
        {
            printf("Harmful
");
        }
        else if (f1<=0.1)
        {
            printf("Recyclable
");
        }
        else
        {
            if (a[2]>=a[3]*2)
            {
                printf("Dry
");
            }
            else
            {
                printf("Wet
");
            }
        }
    }
}

#include<bits/stdc++.h>
using namespace std;
map<string,char>mp;
string s,s1,ss,c[1000],c1[1000],a[1000000],S,ans;
int main()
{
    int T;
    mp["0000"]='0';
    mp["0001"]='1';
    mp["0010"]='2';
    mp["0011"]='3';
    mp["0100"]='4';
    mp["0101"]='5';
    mp["0110"]='6';
    mp["0111"]='7';
    mp["1000"]='8';
    mp["1001"]='9';
    mp["1010"]='a';
    mp["1011"]='b';
    mp["1100"]='c';
    mp["1101"]='d';
    mp["1110"]='e';
    mp["1111"]='f';
    scanf("%d",&T);
    for(int t=1; t<=T; t++)
    {
        printf("Case #%d: ",t);
        cin>>s;
        for (int k=0; k<8; k++)
        {
            s1="";
            for (int i=0; i<4; i++)
            {
                ss="";
                for (int j=0; j<4; j++)
                {
                    ss+=s[k*16+i*4+j];
                }
                s1+=mp[ss];
            }
            c[k]=s1;
        }
        for (int i=0; i<8; i++)
        {
            c1[i]="";
            int j;
            for (j=0; j<4; j++)
            {
                if (c[i][j]!='0')
                {
                    break;
                }
            }
            if (j==4)
            {
                c1[i]="0";
            }
            else
            {
                for (int k=j; k<4; k++)
                {
                    c1[i]+=c[i][k];
                }
            }
        }
 
        int cnt=1;
        a[0]="";
        for (int i=0;i<8;i++){
            if (i!=7){
                a[0]=a[0]+c1[i]+":";
            }else{
                 a[0]=a[0]+c1[i];
            }
        }
        for (int i=0; i<8; i++)
        {
            for (int j=7; j>=i; j--)
            {
                int k;
                if (j-i+1>=2)
                {
                    for (k=i; k<=j; k++)
                    {
                        if (c1[k]!="0")
                        {
                            break;
                        }
                    }
                    if (k==j+1)
                    {
                        S="";
                        for (int l=0; l<i; l++)
                        {
                            S=S+c1[l]+":";
                        }
                        if (i==0)
                        {
                            S=S+":";
                        }
                        S=S+":";
                        for (int l=j+1; l<8; l++)
                        {
                            S=S+c1[l];
                            if (l!=7)
                            {
                                S=S+":";
                            }
                        }
                        a[cnt++]=S;
                    }
 
                }
            }
        }
        int len=10000;
        ans="";
        for (int i=0; i<cnt; i++)
            if (a[i].length()<len)
            {
                len=a[i].length();
                ans=a[i];
            }
            else
            {
                if (a[i].size()==len)
                {
                    if (a[i]<ans)
                    {
                        ans=a[i];
                    }
                }
            }
        cout<<ans<<endl;
    }
    return 0;
}

#include<bits/stdc++.h>
 
using namespace std;
int n,b[10000],v[100000],k,l,r;
bool check(int x)
{
    int f,t=0;
    for (int i=n; i>=1; i--)
    {
        f=0;
        for (int j=1; j<=t; j++)
        {
            if (b[j]+v[i]<=x)
            {
                b[j]+=v[i];
                f=1;
                break;
            }
        }
        if (f==0)
        {
            b[++t]=v[i];
            if (t>k) return 0;
        }
    }
    return 1;
}
int main()
{
    int T;
    scanf("%d",&T);
    for (int t=1; t<=T; t++)
    {
        printf("Case #%d: ",t);
        scanf("%d%d",&n,&k);
        for (int i=1; i<=n; i++)
        {
            scanf("%d",&v[i]);
        }
        sort(v+1,v+1+n);
        l=v[n];
        r=1000000;
        while (l<r)
        {
            int mid=(l+r)>>1;
            if (check(mid))
            {
                r=mid;
            }
            else
            {
                l=mid+1;
            }
        }
        for (int i=max(1,l-60);; i++)
        {
            if (check(i))
            {
                printf("%d
",i);
                break;
            }
 
        }
    }
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
int n,f[2010][2010],tt;
int main()
{
    int T;
    scanf("%d",&T);
    for (int t=1; t<=T; t++)
    {
        printf("Case #%d: ",t);
        scanf("%d",&n);
        if (n==1)
        {
            puts("Yes");
            puts("0");
            puts("1");
            continue;
        }
        if (n%4==2||n%4==3)
        {
            puts("No");
            continue;
        }
        puts("Yes");
        if (n%4==0)
        {
            for (int i=1; i<=n/2; i++)
            {
                for (int j=1; j<=n; j++)
                {
                    tt=i+j;
                    if (tt>n)
                    {
                        tt-=n;
                    }
                    f[tt][j]=j&1;
                    f[j][tt]=j&1;
                }
            }
            for (int i=1; i<=n; i++)
            {
                for (int j=1; j<=n; j++)
                {
                    printf("%d",f[i][j]);
                }
                printf("
");
            }
            for (int i=1; i<n; i++)
            {
                printf("%d",i+1);
                if (i!=n)
                {
                    printf(" ");
                }
                else
                {
                    printf("
");
                }
            }
            printf("1
");
        }
        else
        {
            n--;
            for (int i=1; i<=n/2; i++)
            {
                for (int j=1; j<=n; j++)
                {
                    tt=i+j;
                    if (tt>n)
                    {
                        tt-=n;
                    }
                    f[tt][j]=j&1;
                    f[j][tt]=j&1;
                }
            }
            n++;
            for (int i=1;i<n;i++){
                f[i][n]=f[n][i]=i&1;
            }
            for (int i=1; i<=n; i++)
            {
                for (int j=1; j<=n; j++)
                {
                    printf("%d",f[i][j]);
                }
                printf("
");
            }
            for (int i=1; i<n-1; i++)
            {
                printf("%d ",i+1);
            }
            printf("1 %d
",n);
        }
    }
}

#include<bits/stdc++.h>

using namespace std;
int ans[20],n;
int a[]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
string s[100010];
int f(char c)
{
    return ans[c-'A'];
}

bool check(int id)
{
    int year=f(s[id][0])*1000+f(s[id][1])*100+f(s[id][2])*10+f(s[id][3]);
    int mouth=f(s[id][5])*10+f(s[id][6]);
    int day=f(s[id][8])*10+f(s[id][9]);
    if (year%400==0||(year%4==0&&year%100!=0))
    {
        a[2]=29;
    }
    if (year<1600||year>9999||mouth>12||mouth<1||day<1||day>a[mouth])
    {
        return 0;
    }
    if(mouth<=2)
    {
        mouth+=12;
        year--;
    }
    int tmp=(day+mouth*2+3*(mouth+1)/5+year+year/4-year/100+year/400+1)%7;
    if (tmp==5)
    {
        return 1;
    }
    return 0;
}
int main()
{
    int T;
    scanf("%d",&T);
    for (int t=1; t<=T; t++)
    {
        printf("Case #%d: ",t);
        scanf("%d",&n);
        for (int i=0; i<10; i++)
        {
            ans[i]=i;
        }
        for (int i=0; i<n; i++)
        {
            cin>>s[i];
        }
        sort(s,s+n);
        n=unique(s,s+n)-s;
        int f=1;
        do
        {
            int i;
            for (i=0; i<n; i++)
            {
                if (!check(i))
                {
                    break;
                }
            }
            if (i==n)
            {
                for (int i=0; i<10; i++)
                {
                    printf("%d",ans[i]);
                }
                f=0;
                puts("");
                break;
            }
        }
        while (next_permutation(ans,ans+10));
        if (f)
        {
            puts("Impossible");
        }
    }
}

  

原文地址:https://www.cnblogs.com/Accpted/p/11295627.html