zoukankan      html  css  js  c++  java
  • 挑战编程

    第一章 入门

    Chapter 1

    100 - The 3n + 1 problem


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    const int maxn=1111111;
    
    int f[maxn];
    
    int main()
    {
        int x,y;
        int ans,ret;
        memset(f,0,sizeof(f));
        while (~scanf("%d%d",&x,&y))
        {
            ans=0;
            for (int i=min(x,y);i<=max(x,y);i++)
            {
                if (f[i]) ret=f[i];
                else
                {
                    ret=1;
                    int n=i;
                    while (n!=1)
                    {
                        if (n&1) n=3*n+1;
                        else n/=2;
                        ret++;
                    }
                    f[i]=ret;
                }
                if (ret>ans) ans=ret;
            }
            printf("%d %d %d\n",x,y,ans);
        }
        return 0;
    }


    10189 - Minesweeper


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int direct[8][2]={ {1,0},{-1,0},{0,1},{0,-1},{1,1},{-1,1},{1,-1},{-1,-1} };
    
    char s[111][111];
    int f[111][111];
    int n,m;
    
    bool check(int x,int y)
    {
        if (x>=1&&x<=n&&y>=1&&y<=m) return true;
        return false;
    }
    
    int main()
    {
        int cnt=0;
        while (~scanf("%d%d",&n,&m))
        {
            if (n==0&&m==0) break;
            memset(f,0,sizeof(f));
            for (int i=1;i<=n;i++)
            {
                scanf("%s",s[i]+1);
            }
            for (int i=1;i<=n;i++)
            {
                for (int j=1;j<=m;j++)
                {
                    if (s[i][j]=='*')
                    {
                        for (int k=0;k<8;k++)
                        {
                            int x=i+direct[k][0];
                            int y=j+direct[k][1];
                            if (check(x,y)) f[x][y]++;
                        }
                    }
                }
            }
            if (cnt>0) puts("");
            printf("Field #%d:\n",++cnt);
            for (int i=1;i<=n;i++)
            {
                for (int j=1;j<=m;j++)
                {
                    if (s[i][j]=='*') printf("*");
                    else printf("%d",f[i][j]);
                }
                printf("\n");
            }
        }
        return 0;
    }



    10137 - The Trip


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    const int maxn=111111;
    double a[maxn];
    
    int main()
    {
        int n;
        double sum,avg,ans1,ans2;
        while (~scanf("%d",&n))
        {
            if (n==0) break;
            sum=0;
            for (int i=0;i<n;i++)
            {
                scanf("%lf",&a[i]);
                sum+=a[i];
            }
            avg=sum/n;
            ans1=0;
            ans2=0;
            for (int i=0;i<n;i++)
            {
                if (a[i]<avg) ans1+=double(int((avg-a[i])*100))/100.0;
                if (avg<a[i]) ans2+=double(int((a[i]-avg)*100))/100.0;
            }
            printf("$%0.2f\n",max(ans1,ans2));
        }
        return 0;
    }



    10267 - Graphical Editor

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <queue>
    
    using namespace std;
    
    const int direct[4][2]={ {0,1},{1,0},{0,-1},{-1,0} };
    char map[333][333];
    int n,m;
    
    void set(char c)
    {
        for (int i=1; i<=n; i++)
        {
            for (int j=1; j<=m; j++)
            {
                map[i][j]=c;
            }
        }
    }
    
    void print(int x1,int y1,int x2,int y2,char c)
    {
        for (int i=y1;i<=y2&&i<=n;i++)
        {
            for (int j=x1;j<=x2&&j<=m;j++)
            {
                map[i][j]=c;
            }
        }
    }
    
    struct POINT{
        int x;
        int y;
    };
    
    
    int main()
    {
        char c,chr;
        int x,y;
        int x1,x2,y1,y2;
        char name[333];
        while (cin>>c)
        {
            if (c=='X') break;
            else if (c=='I')
            {
                cin>>m>>n;
                set('O');
            }
            else if (c=='C')
            {
                set('O');
            }
            else if (c=='L')
            {
                cin>>x>>y>>chr;
                map[y][x]=chr;
            }
            else if (c=='V')
            {
                cin>>x>>y1>>y2>>chr;
                if (y1>y2) swap(y1,y2);
                print(x,y1,x,y2,chr);
            }
            else if (c=='H')
            {
                cin>>x1>>x2>>y>>chr;
                if (x1>x2) swap(x1,x2);
                print(x1,y,x2,y,chr);
            }
            else if (c=='K')
            {
                cin>>x1>>y1>>x2>>y2>>chr;
                if (x1>x2) swap(x1,x2);
                if (y1>y2) swap(y1,y2);
                print(x1,y1,x2,y2,chr);
            }
            else if (c=='F')
            {
                cin>>x>>y>>chr;
                queue<POINT>que;
                while (!que.empty()) que.pop();
                POINT p;
                p.x=y;
                p.y=x;
                char tel=map[p.x][p.y];
                if (tel==chr) continue;
                que.push(p);
                map[p.x][p.y]=chr;
                while (!que.empty())
                {
                    POINT tmp=que.front();
                    que.pop();
                    for (int i=0;i<4;i++)
                    {
                        p.x=tmp.x+direct[i][0];
                        p.y=tmp.y+direct[i][1];
                        if (p.x>=1&&p.x<=n&&p.y>=1&&p.y<=m&&map[p.x][p.y]==tel)
                        {
                            map[p.x][p.y]=chr;
                            que.push(p);
                        }
                    }
                }
            }
            else if (c=='S')
            {
                cin>>name;
                cout<<name<<endl;
                for (int i=1;i<=n;i++)
                {
                    for (int j=1;j<=m;j++)
                    {
                        cout<<map[i][j];
                    }
                    cout<<endl;
                }
            }
            else
            {
                continue;
            }
        }
        return 0;
    }



    第二章 数据结构

    Chapter 2


    10038 - Jolly Jumpers

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int maxn=3333;
    bool v[maxn];
    int a[maxn];
    int n;
    int sum;
    
    int main()
    {
        while (cin>>n)
        {
            sum=0;
            memset(v,0,sizeof(v));
            for (int i=1;i<=n;i++) cin>>a[i];
            for (int i=2;i<=n;i++)
            {
                int t=abs(a[i]-a[i-1]);
                if (!v[t]&&t>=1&&t<=n-1)
                {
                    v[t]=true;
                    sum++;
                }
            }
            if (sum==n-1) puts("Jolly");
            else puts("Not jolly");
        }
        return 0;
    }



    第三章 字符串

    Chapter 3


    10010 - Where's Waldorf?


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <ctype.h>
    using namespace std;
    
    const int direct[8][2]= { {0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1} };
    
    char map[55][55];
    int n,m;
    bool v[55][55];
    char s[55];
    int len;
    
    bool check(int x,int y)
    {
        if (x>=1&&x<=n&&y>=1&&y<=m) return true;
        return false;
    }
    
    bool dfs(int x,int y,int deep,int g)
    {
        if (deep>=len) return true;
        if (!check(x,y)) return false;
        if (map[x][y]!=s[deep]) return false;
        int dx=x+direct[g][0];
        int dy=y+direct[g][1];
        if (dfs(dx,dy,deep+1,g)) return true;
        return false;
    }
    
    int main()
    {
        int T,k;
        cin>>T;
        while (T--)
        {
            cin>>n>>m;
            for (int i=1; i<=n; i++) cin>>(map[i]+1);
            for (int i=1; i<=n; i++) for (int j=1; j<=m; j++)
                if (islower(map[i][j])) map[i][j]=toupper(map[i][j]);
            cin>>k;
            //for (int i=1; i<=n; i++) cerr<<(map[i]+1)<<endl;
            while (k--)
            {
                int i,j,g;
                bool ok=false;
                cin>>s;
                len=strlen(s);
                for (i=0; i<len; i++)
                    if (islower(s[i])) s[i]=toupper(s[i]);
                //cerr<<s<<endl;
                for (i=1; i<=n; i++)
                {
                    for (j=1; j<=m; j++)
                    {
                        for (g=0; g<8; g++)
                        {
                            if (dfs(i,j,0,g))
                            {
                                ok=true;
                                cout<<i<<" "<<j<<endl;
                                break;
                            }
                        }
                        if (ok) break;
                    }
                    if (ok) break;
                }
            }
            if (T) cout<<endl;
        }
        return 0;
    }

    10188 - Automated Judge Script


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    vector<string>ac,sub;
    int n,m;
    
    bool accepted()
    {
        for (int i=0;i<n;i++)
        {
            if (ac[i]!=sub[i]) return false;
        }
        return true;
    }
    
    bool PE()
    {
        string num;
        string ans;
        num.clear();
        ans.clear();
        for (int i=0;i<n;i++)
        {
            for (int j=0;j<ac[i].size();j++)
            {
                if (isdigit(ac[i][j])) num+=ac[i][j];
            }
        }
        for (int i=0;i<m;i++)
        {
            for (int j=0;j<sub[i].size();j++)
            {
                if (isdigit(sub[i][j])) ans+=sub[i][j];
            }
        }
        if (ans==num) return true;
        /*
        cerr<<"---"<<ans<<"---"<<num<<"---";
        if(ans==num) cerr<<"same"<<endl;
        else cerr<<"not"<<endl;
        */
        return false;
    }
    
    int main()
    {
        string s;
        int cnt=0;
        while (cin>>n)
        {
            if (n==0) break;
            ac.clear();
            sub.clear();
            getchar();
            for (int i=0;i<n;i++)
            {
                getline(cin,s);
                ac.push_back(s);
            }
            cin>>m;
            getchar();
            for (int i=0;i<m;i++)
            {
                getline(cin,s);
                sub.push_back(s);
            }
            if (n==m&&accepted())
            {
                cout<<"Run #"<<++cnt<<": Accepted"<<endl;
            }
            else if (PE())
            {
                cout<<"Run #"<<++cnt<<": Presentation Error"<<endl;
            }
            else
            {
                cout<<"Run #"<<++cnt<<": Wrong Answer"<<endl;
            }
        }
        return 0;
    }
    




    第四章 排序

    Chapter 4


    10041 - Vito's Family


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    int a[555];
    int n;
    
    int main()
    {
        int T;
        int ans;
        cin>>T;
        while (T--)
        {
            cin>>n;
            ans=0;
            for (int i=1;i<=n;i++) cin>>a[i];
            sort(a+1,a+n+1);
            int m=n/2+1;
            for (int i=1;i<=n;i++) ans+=abs(a[i]-a[m]);
            cout<<ans<<endl;
        }
        return 0;
    }
    


    第五章 算数与代数

    Chapter 5


    10035 - Primary Arithmetic


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    int a[111];
    int b[111];
    char sa[111];
    char sb[111];
    int lena,lenb;
    
    int main()
    {
        while (cin>>sa>>sb)
        {
            if (strcmp(sa,sb)==0&&strcmp(sa,"0")==0) break;
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            lena=strlen(sa);
            lenb=strlen(sb);
            for (int i=0;i<lena;i++) a[i]=sa[lena-i-1]-'0';
            for (int i=0;i<lenb;i++) b[i]=sb[lenb-i-1]-'0';
            int ans=0;
            for (int i=0;i<max(lena,lenb);i++)
            {
                a[i]+=b[i];
                if (a[i]>=10)
                {
                    a[i+1]+=1;
                    a[i]-=10;
                    ans++;
                }
            }
            if (ans==1) cout<<ans<<" carry operation."<<endl;
            else if (ans>1) cout<<ans<<" carry operations."<<endl;
            else cout<<"No carry operation."<<endl;
        }
        return 0;
    }




    第六章 组合数学

    Chapter 6




    第七章 数论

    Chapter 7




    第八章 回溯法

    Chapter 8




    第九章 图遍历

    Chapter 9




    第十章 图算法

    Chapter 10




    第十一章 动态规划

    Chapter 11




    第十二章 网络

    Chapter 12




    第十三章 几何

    Chapter 13




    第十四章 计算几何

    Chapter 14





  • 相关阅读:
    mac 10.15.7 修改PATH
    oc 属性类型一般用法
    ubuntu解压zip文件名乱码
    telnet 退出
    docker 根据容器创建镜像
    mac android adb device 没有显示设备
    Yii2 查看所有的别名 alias
    Yii2 App Advanced 添加 .gitignore
    ubuntu 18.04 搜狗突然就提示乱码
    An error occured while deploying the file. This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to
  • 原文地址:https://www.cnblogs.com/cyendra/p/3681609.html
Copyright © 2011-2022 走看看