zoukankan      html  css  js  c++  java
  • 2019hdu多校1

    1009

    考虑贪心,暴力枚举一位。

    $o(676n)$

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+333;
    int n,m,zl;
    int pos[26],cnt[N],t[26],az[N];
    char s[N],st[N];
    int l[N],r[N],nx[N],zzq[26];
    int main(){
        ios::sync_with_stdio(0);
        //freopen("p.in","r",stdin);
        //freopen("p.out","w",stdout);
        while(cin>>s){
        n=strlen(s);
        cin>>m;
        for(int i=0;i<26;i++)cin>>l[i]>>r[i];
        //if(m>10)continue;
        int ans=0;
        for(int i=0;i<=25;i++){ans+=l[i];pos[i]=n+3;t[i]=0;cnt[n+3]=0;} 
        for(int i=0;i<=n+20;i++)az[i]=cnt[i]=0;
        for(int i=n;i>=1;i--){
            int dot=s[i-1]-'a';
            nx[i]=pos[dot];
            pos[dot]=i;
            t[dot]++;    
            cnt[i]=t[dot];
        }
        zl=0;
        /*while(pos[0]<=n){
            cout<<pos[0]<<g' '<<cnt[pos[0]]<<endl;
            pos[0]=nx[pos[0]];
        }*/
        for(int i=1;i<=m;i++){
            st[i-1]='0';
            for(int j=0;j<=25;j++){
                int len=n-pos[j]; 
                if(len+i<m)continue;
                if(az[j]==r[j])continue;
                bool ax=0;
                // AZAZAZAZ
                for(int k=0;k<=25;k++)zzq[k]=pos[k];
                
                int dis=pos[j];
                for(int k=0;k<=25;k++)
                    while(pos[k]<=dis)pos[k]=nx[pos[k]];
                l[j]--;
                for(int k=0;k<=25;k++){
                    int num=cnt[pos[k]];
                //    if(pos[k]==i&&k!=j)num--;
                    if(num<l[k])ax=1;
                //    if(l[k]>m-i&&k!=j)ax=1;
                }
                int q=0;
                for(int pp=0;pp<=25;pp++)if(l[pp]>0)q+=l[pp];            
                //cout<<q<<endl;
                if(q>m-i)ax=1;
                if(ax){
                    for(int k=0;k<=25;k++)
                    pos[k]=zzq[k];
                    l[j]++;
                continue;}
                //AFAEFAEEFD
                az[j]++;
                st[i-1]='a'+j;
                //cout<<pos[j]<<endl;
                break;
            }
            //cout<<zl<<endl;
            //if(!zl){break;cout<<m<<' ';}
            if(st[i-1]=='0')zl=1;
        }
        if(zl){cout<<-1<<endl;continue;}
        for(int i=0;i<m;i++)cout<<st[i];
        cout<<endl;
        }
        return 0;
    }
    View Code

    1001

    考虑dp

    https://www.cnblogs.com/DeaphetS/p/11229389.html

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int mo=998244353;
    ll dp[102][102][102][2],n,m,ans;
    vector<int>r[102],x[102]; 
    int main(){
        int t;
        //freopen("p.in","r",stdin);
        //freopen("p.out","w",stdout);
        cin>>t;
        while(t){
            t--;
            cin>>n>>m;
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=n;i++){
                r[i].clear();
                x[i].clear();
            }
            for(int i=1;i<=m;i++){
                int a,b,c;
                cin>>a>>b>>c;
                r[b].push_back(a);
                x[b].push_back(c);
            }
            dp[0][0][0][0]=1;
        for(int cur=1;cur<=n;cur++){
            int o=cur%2;
            for(int i=0;i<=cur;i++)
                for(int j=i;j<=cur;j++)
                    for(int k=j;k<=cur;k++)
                    dp[i][j][k][o]=0;
            for(int i=0;i<=cur;i++)
                for(int j=i;j<=cur;j++)
                    for(int k=j;k<=cur;k++)
            {
            dp[i][j][cur-1][o]=(dp[i][j][cur-1][o]+dp[i][j][k][o^1])%mo;
            dp[i][k][cur-1][o]=(dp[i][k][cur-1][o]+dp[i][j][k][o^1])%mo;
            dp[j][k][cur-1][o]=(dp[j][k][cur-1][o]+dp[i][j][k][o^1])%mo;
            dp[i][j][k][o]=(dp[i][j][k][o]+dp[i][j][k][o^1])%mo;}
            for(int i=0;i<=cur;i++)
                for(int j=i;j<=cur;j++)
                    for(int k=j;k<=cur;k++)
                    for(int az=0;az<r[cur].size();az++){
                        int ql=r[cur][az],qx=x[cur][az];
                        if((i>=ql)+(j>=ql)+(k>=ql)+(cur>=ql)!=qx)
                        dp[i][j][k][o]=0;
                    }
        }
            ans=0;
            for(int i=0;i<=n;i++)
                for(int j=i;j<=n;j++)
                    for(int k=j;k<=n;k++)
                ans=(ans+dp[i][j][k][n%2])%mo;
                cout<<ans<<endl;
                }
                return 0;
    }
    View Code
    戒骄戒躁
  • 相关阅读:
    【配置属性】—Entity Framework 对应表字段的类型的设定配置方法
    EntityFrame Work 6 Code First 配置字段为varchar 类型
    Echarts xAxis boundaryGap
    JavaScript Array和string的转换
    SQL server :主键和外键
    SQL server :“增删改查” 之 “改”
    SQL server :“增删改查” 之 “删”
    SQL server :“增删改查” 之 “增”
    Oracle不能连接故障排除【TNS-12541:TNS:无监听程序】
    LNMP平台部署及应用
  • 原文地址:https://www.cnblogs.com/lxzl/p/11225415.html
Copyright © 2011-2022 走看看