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;
    }
  • 相关阅读:
    图片验证码制作
    上传图片加水印
    组合查询加分页
    C# 数据类型 数据转换 自己的见解和方式
    C# 基础控制台程序的创建,输出,输入,定义变量,变量赋值,值覆盖,值拼接,值打印
    关于Spring注解
    java I/O
    关于web.xml配置
    第7章 使用springMVC构建Web应用程序 7.1 springMVC配置
    js配合c3制作一个动态钟表
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/7693806.html
Copyright © 2011-2022 走看看