zoukankan      html  css  js  c++  java
  • Codeforces Round #102 (Div. 2) //缺E

    -----------------------

    A. Help Vasilisa the Wise 2

    ---

    暴力枚举

    ---

    #include <iostream>
    
    using namespace std;
    int r1,r2,c1,c2,d1,d2;
    int a[2][2];
    bool solve()
    {
        if (a[0][0]+a[0][1]!=r1) return false;
        if (a[1][0]+a[1][1]!=r2) return false;
        if (a[0][0]+a[1][0]!=c1) return false;
        if (a[0][1]+a[1][1]!=c2) return false;
        if (a[0][0]+a[1][1]!=d1) return false;
        if (a[0][1]+a[1][0]!=d2) return false;
        return true;
    }
    
    int main()
    {
        bool flag=false;
        cin>>r1>>r2>>c1>>c2>>d1>>d2;
        for (int i=1; i<=9; i++){
            for (int j=1; j<=9; j++){
                if (i==j) continue;
                for (int k=1; k<=9; k++){
                    if (k==i||k==j) continue;
                    for (int l=1; l<=9; l++){
                        if (l==i||l==j||l==k) continue;
                        a[0][0]=i;
                        a[0][1]=j;
                        a[1][0]=k;
                        a[1][1]=l;
                        if (solve()){
                            flag=true;
                            break;
                        }
                    }
                    if (flag) break;
                }
                if (flag) break;
            }
            if (flag) break;
        }
        if (flag){
            for (int i=0;i<2;i++){
                for (int j=0;j<2;j++){
                    cout<<a[i][j]<<" ";
                }
                cout<<endl;
            }
        }
        else{
            cout<<-1<<endl;
        }
        return 0;
    }
    -----------------------

    B. Help Kingdom of Far Far Away 2

    ----

    对字符串处理

    ----

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    char s[1111];
    char a[111],b[111];
    int main()
    {
        bool dec=false;
        bool dot=false;
        cin>>s;
        if (s[0]=='-') dec=true;
        int len=strlen(s);
        int la=0,lb=0;
        for (int i=dec;i<len;i++){
            if (s[i]=='.'){
                dot=true;
                continue;
            }
            if (!dot) a[la++]=s[i];
            else b[lb++]=s[i];
        }
        a[la]=0;
        b[lb++]='0';
        b[lb++]='0';
        b[lb]=0;
        len=0;
        if (dec) s[len++]='(';
        s[len++]='$';
        int m=la;
        for (int i=0;i<la;i++){
            if (m%3==0&&m!=la) s[len++]=',';
            m--;
            s[len++]=a[i];
        }
        s[len++]='.';
        for (int i=0;i<2;i++) s[len++]=b[i];
        if (dec) s[len++]=')';
        s[len]=0;
        cout<<s<<endl;
        return 0;
    }
    -----------------------

    C. Help Farmer

    ---

    枚举剩下的n块方格能拼成的立方体。

    对每一种可能的立方体尝试3种可能的被切割方式(A-2)(B-2)(C-1).....(A-1)(B-2)(B-2)......

    取其中的最大值和最小值。

    ---

    #include <iostream>
    
    using namespace std;
    typedef long long LL;
    const LL INFF=(1LL << 60);
    int main()
    {
        LL n,m,c,res;
        LL Max=0,Min=INFF;
        cin>>n;
        for (LL i=1;i*i<=n;i++){
            if (n%i==0){
                m=n/i;
                for (LL j=1;j*j<=m;j++){
                    if (m%j==0){
                        c=m/j;
                        res=(i+1)*(j+2)*(c+2)-n;
                        Max=max(Max,res);
                        Min=min(Min,res);
                        res=(i+2)*(j+1)*(c+2)-n;
                        Max=max(Max,res);
                        Min=min(Min,res);
                        res=(i+2)*(j+2)*(c+1)-n;
                        Max=max(Max,res);
                        Min=min(Min,res);
                    }
                }
            }
        }
        cout<<Min<<" "<<Max<<endl;
        return 0;
    }

    -----------------------

    D. Help General

    ---

    令1表示有马,0表示无马。

    当n=1或m=1时 

    1111111111..... 为最佳排列

    当n=2或m=2时    

    110011001100.....

    110011001100.....为最佳排列

    其他情况下

    1010101010....

    0101010101....

    1010101010...

    0101010101...最佳

    ---

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int n,m;
        cin>>n>>m;
        if (n==1||m==1){
            cout<<n*m<<endl;
            return 0;
        }
        if (n==2||m==2){
            if (n<m) swap(n,m);
            int c=(n/4)*2;
            if (n%4>0) c++;
            if (n%4>1) c++;
            cout<<c*2<<endl;
            return 0;
        }
        int a,b,c,d;
        a=(n+1)/2;
        b=(m+1)/2;
        c=n/2;
        d=m/2;
        cout<<a*b+c*d<<endl;
        return 0;
    }



    -----------------------


  • 相关阅读:
    关于管理单元初始化失败的解决方法
    如何快速在两台电脑之间传输大文件
    拿到商标受理通知书就可以打上“TM”就可以使用吗?
    山里王土蜂蜜
    我的博客今天1岁344天了,我领取了新锐博主徽章
    Winxp Stop c0000218 unknown hard error
    设置网易博客、新浪博客、博客园的windows live writer帐户支持
    邮件变成了Winmail.dat
    outlook 2007 .pst文件过大,提示:“磁盘空间已满,无法删除邮件”
    git 本地给远程仓库创建分支 三步法
  • 原文地址:https://www.cnblogs.com/cyendra/p/3681639.html
Copyright © 2011-2022 走看看