zoukankan      html  css  js  c++  java
  • codeforces 389 D. Fox and Minimal path(构造+思维)

    题目链接:https://vjudge.net/contest/175446#problem/J

    题解:显然要用最多n个点构成的图要使的得到的最短路条数有1e9次个,显然要有几个数相乘容易想到2的几进制显然所有数都可以又2的几次方凑的于是利用一下别人的图

    这就是构造方法我的稍稍有些不同我是先构造直线再构造交叉的我感觉这样简单一点

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    typedef long long ll;
    char mmp[1234][1234];
    bool vis[1234][1234];
    ll Po[33];
    int num[33];
    int main() {
        int k;
        Po[0] = 1;
        for(int i = 1 ; i <= 32 ; i++) {
            Po[i] = (ll)2 * Po[i - 1];
        }
        for(int i = 1 ; i <= 1111 ; i++) {
            for(int j = 1 ; j <= 1111 ; j++) {
                mmp[i][j] = 'N';
            }
        }
        memset(num , 0 , sizeof(num));
        scanf("%d" , &k);
        int gg = k , cnt = 0;
        while(gg) {
            num[cnt++] = gg % 2;
            gg /= 2;
        }
        cnt--;
        int gm = 3;
        for(int i = 1 ; i < 2 * cnt ; i++) {
            mmp[gm][gm + 1] = mmp[gm + 1][gm] = 'Y';
            gm++;
        }
        int ed = gm;
        mmp[gm][2] = mmp[2][gm] = 'Y';
        mmp[1][gm + 1] = mmp[gm + 1][1] = 'Y';
        gm++;
        int tm = 1;
        for(int i = 0 ; i < cnt ; i++) {
            tm += 2;
            if(num[i]) {
                mmp[gm][tm] = mmp[tm][gm] = 'Y';
            }
            if(i == cnt - 1) {
                mmp[gm][gm + 1] = mmp[gm][gm + 2] = mmp[gm + 1][gm] = mmp[gm + 2][gm] = 'Y';
                mmp[gm + 1][ed] = mmp[gm + 2][ed] = mmp[ed][gm + 1] = mmp[ed][gm + 2] = 'Y';
                gm += 2;
                break;
            }
            mmp[gm][gm + 1] = mmp[gm][gm + 2] = mmp[gm + 1][gm] = mmp[gm + 2][gm] = 'Y';
            mmp[gm + 1][gm + 3] = mmp[gm + 2][gm + 3] = mmp[gm + 3][gm + 1] = mmp[gm + 3][gm + 2] = 'Y';
            gm += 3;
        }
        if(cnt == 0) {
            gm = 2;
            mmp[1][2] = mmp[2][1] = 'Y';
            mmp[1][1] = mmp[2][2] = 'N';
        }
        printf("%d
    " , gm);
        for(int i = 1 ; i <= gm ; i++) {
            for(int j = 1 ; j <= gm ; j++) {
                putchar(mmp[i][j]);
            }
            puts("");
        }
        return 0;
    }
  • 相关阅读:
    HIVE中内连接和左半连接不一致问题
    hive 中的Sort By、 Order By、Cluster By、Distribute By 区别
    基于MapReduce的矩阵乘法运算
    基于MapReduce的关系代数运算(2)
    基于MapReduce的关系代数运算(1)
    帖子爬取
    tomcat------https单向认证和双向认证
    struts2配置文件struts.xml的简介
    2014,事情只有一件!
    MYSQLi数据访问查询数据
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/7693806.html
Copyright © 2011-2022 走看看