zoukankan      html  css  js  c++  java
  • Codeforces Round #194 (Div. 2) 部分题解

    http://codeforces.com/contest/334

    A题意:1-n^2 平均分成 n 份,每份n个数,且和相同

    解法 : 构造矩阵1-n^2的矩阵即可

    int a[105][105];
    int main()
    {
        int n;
        scanf("%d",&n);
        int k = n*n;
        int c = 1;
        for(int i = 0 ; i < n ; i++)
            for(int j = 0 ; j < n ; j++)
                a[i][j] = c++;}
        for(int i = 0 ; i < n ; i++)
        {
            for(int j = 0 ; j < n ; j++)
                printf("%d ",a[j][(i+j)%n]);
            puts("");
        }
        return 0;
    }

    B:8个点能否关于矩形对称

    解法: 直接暴力判断8个点,注意判重

    struct point
    {
        int x,y;
    }p[8];
    int cmp(point a,point b){
        if(a.x == b.x) return a.y<b.y;
        return a.x < b.x;
    }
    int main()
    {
        for(int i =0 ; i < 8 ; i++)
            cin>>p[i].x>>p[i].y;
        sort(p,p+8,cmp);
        for(int i = 0 ; i < 8 ; i++)
            for(int j = 0 ; j < 8 ; j++)
                if(i != j && p[i].x == p[j].x && p[i].y == p[j].y)
                {
                    cout<<"ugly"<<endl;
                    return 0;
                }
        if(p[0].x == p[1].x && p[1].x == p[2].x && p[3].x == p[4].x
            && p[5].x == p[6].x && p[6].x == p[7].x)
        {
            if(p[0].y == p[3].y && p[3].y == p[5].y && p[1].y == p[6].y
                && p[2].y == p[4].y && p[4].y == p[7].y)
                cout<<"respectable"<<endl;
            else cout<<"ugly"<<endl;
        }else cout<<"ugly"<<endl;
        return 0;
    }

    C题意: 用面值为3的次幂的硬币 购买价值为n的商品 , 要求硬币总价值>n且硬币数最多且这些硬币的子集不能>=n

    解法 : 贪心,如果非3的倍数一定是n/3+1 即全换成3

    否则就不能换成3要换成面值更大的 以此类推直到不为3^k为止

    int main() {
        LL n;
        cin>>n;
        while(n % 3 == 0) n /= 3;
        cout<<(n/3)+1<<endl;
    }

    D题意: 在n*n矩阵中 有一些不能走的格子, 从边界(非顶角)出发 能直线走到对面边界的最多方案数

    解法 : 如果中间没有不能走的格子 ,对于在(x,x)上相交的十字形一共有2种不冲突的放法

    可以证出: 其中一定存在一种对其他情况不影响走法 ----------------------------------画图可归纳

    奇数情况特判中间点即可

    bool bx[1005],by[1005];
    int n,m;
    int main()
    {
        //freopen("in.txt","r",stdin);
        cin>>n>>m;
        while(m--)
        {
            int x,y;
            cin>>x>>y;
            bx[x] = 1;
            by[y] = 1;
        }
        int res = 0;
        for(int i = 2; i < n ; i++)
        {
            if(bx[i] == 0) res++;
            if(by[i] == 0) res++;
        }
        if(n%2 == 1 && bx[n/2+1] == 0 && by[n/2+1] == 0) res--;
        cout<<res<<endl;
        return 0;    
    }
  • 相关阅读:
    正则表达式--验证中国手机号
    PostgreSQ数据库安全连接请求问题
    golang时间正反格式化
    Git 分支管理和冲突解决
    golang交叉编译
    ps命令
    Redis应用场景
    SecureCRT for Mac
    Redis作者谈Redis应用场景
    redis 五种数据的应用场景
  • 原文地址:https://www.cnblogs.com/Felix-F/p/3220783.html
Copyright © 2011-2022 走看看