• A hard Aoshu Problem(hdu 3699 暴力枚举


    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3699

    一开始用string超时了 

    #include<bits/stdc++.h>
    using namespace std;
    char s1[10],s2[10],s3[10];
    bool qdl(char s[],int a,int b,int c,int d,int e)//前导零
    {
        if(strlen(s)>1&&(s[0]=='A'&&a==0||s[0]=='B'&&b==0||s[0]=='C'&&c==0||s[0]=='D'&&d==0||s[0]=='E'&&e==0))return 0;
        return 1;
    }
    int change(char s[],int a,int b,int c,int d,int e)//字符串 转int
    {
        int q=0,p;
        for(int i=0;i<strlen(s);i++)
        {
            if(s[i]=='A')p=a;
            else if(s[i]=='B')p=b;
            else if(s[i]=='C')p=c;
            else if(s[i]=='D')p=d;
            else p=e;
            q=q*10+p;
        }
        return q;
    }
    int main()
    {
        int a,b,c,d,e;
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%s%s%s",s1,s2,s3);
            int mp[100];
            memset(mp,0,sizeof(mp));
            for(int k=0;s1[k];k++)mp[s1[k]]++;
            for(int k=0;s2[k];k++)mp[s2[k]]++;
            for(int k=0;s3[k];k++)mp[s3[k]]++;
            int cnt=0;//几个字母没出现过
            for(int i=65;i<=69;i++)if(mp[i]==0)cnt++;
            int ans=0;
            for(a=0;a<=9;a++)
            {
                for(b=0;b<=9;b++)
                {
                    if(b!=a)
                    {
                        for(c=0;c<=9;c++)
                        {
                            if(c!=a&&c!=b)
                            {
                                for(d=0;d<=9;d++)
                                {
                                    if(d!=a&&d!=b&&d!=c)
                                    {
                                        for(e=0;e<=9;e++)
                                        {
                                            if(e!=a&&e!=b&&e!=c&&e!=d)
                                            {
                                                if(qdl(s1,a,b,c,d,e)&&qdl(s2,a,b,c,d,e)&&qdl(s3,a,b,c,d,e))
                                                {
                                                    int x=change(s1,a,b,c,d,e);
                                                    int y=change(s2,a,b,c,d,e);
                                                    int z=change(s3,a,b,c,d,e);
                                                    if(x+y==z)ans++;
                                                    if(x-y==z)ans++;
                                                    if(x*y==z)ans++;
                                                    if(y!=0&&x%y==0&&x/y==z)ans++;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            for(int i=6;i<cnt+6;i++)
            {
                ans/=i;//把没出现过的字母循环算进去了 所以除去
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    /*
    2
    A A A
    BCD BCD B
    */
    View Code
  • 相关阅读:
    C# 函数参数object sender, EventArgs e
    Winform中利用委托实现窗体之间的传值
    Web前端学习笔记——Canvas
    js 删除 按钮所在的行
    box-sizing
    前端中关于HTML标签的属性for的理解
    apply和call的用法总结
    target 确定元素是谁??
    css3过渡和动画
    处理两端极限值的小技巧
  • 原文地址:https://www.cnblogs.com/ydw--/p/11370475.html
Copyright © 2020-2023  润新知