zoukankan      html  css  js  c++  java
  • Problem D. Berland Railroads Gym

    题目链接:https://cn.vjudge.net/contest/274029#problem/D

    题目大意:给你0-9每个数的个数,然后让你找出最大的数,满足的条件是任意三位相连的都能被三整除。

    具体思路:首选数比较大,考虑用字符的方法存储,然后我们可以枚举开头两个数字,然后不停的往后找符合的串,然后再比较出这些最长的串中最大的就可以了。

    AC代码:

    #include<bits/stdc++.h>
    #include<string>
    #include<cstring>
    #include<stdio.h>
    using namespace std;
    # define ll long long
    # define inf 0x3f3f3f3f
    const int maxn =200000+100;
    # define ll long long
    struct node
    {
        char str[maxn];
        int len;
    } q[105];
    int a[maxn],b[maxn];
    bool cmp(node t1,node t2)
    {
        if(t1.len!=t2.len)return t1.len>t2.len;
        if(strcmp(t1.str,t2.str)>0)return true;
        return false;
    }
    int main()
    {
        int num=0;
        for(int i=0; i<=9; i++)
        {
            cin>>a[i];
        }
        for(int i=1; i<=9; i++)
        {
            for(int j=0; j<=9; j++)
            {
                for(int k=0; k<=9; k++)
                {
                    b[k]=a[k];
                }
                if(b[i]==0)continue;
                b[i]--;
                if(b[j]==0)continue;
                b[j]--;
                int len=0;
                q[++num].str[len++]=i+'0';
                q[num].str[len++]=j+'0';
                while(1)
                {
                    int flag=1;
                    for(int k=9; k>=0; k--)
                    {
                        int t1=q[num].str[len-2];
                        int t2=q[num].str[len-1];
                        if(b[k]>0&&(t1+t2+k)%3==0)
                        {
                            b[k]--;
                            q[num].str[len++]=k+'0';
                            flag=0;
                            break;
                        }
                    }
                    if(flag)break;
                }
                q[num].str[len]='';
                q[num].len=len;
            }
        }
        for(int i=1; i<=9; i++)
        {
            if(a[i])q[++num].str[0]=i+'0',q[num].len=1;
        }
        q[++num].str[0]='0',q[num].len=1;
        sort(q+1,q+num+2,cmp);
        cout<<q[1].str<<endl;
        return 0;
    }
    
    
    
  • 相关阅读:
    iOS中GestureRecognizer的6大手势与代理方法详细使用
    使用pan手势实现抽屉效果
    mfc HackerTools释放资源
    mfc HackerTools防止程序双开
    FLV简介
    AAC简介
    H.264简介
    PCM简介
    YUV格式
    编译ffmpeg(第一次),实现JPG转MP4
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262794.html
Copyright © 2011-2022 走看看