原文链接https://www.cnblogs.com/zhouzhendong/p/SRM704-800.html

题解

考虑构造一个 $n = 20$ 的图。

先把所有 $i$ 都连向 $i-1$ ,对于所有 $i,j(1\leq i<j<n)$,加边 $i->j$。

设 $f(i)$ 表示从点 $i$ 开始经过 $i\cdots n-1$ 这些点的路径条数,则:

$$f(19) = f(18) = 1$$

$$\forall 1\leq i<18,f(i) = 2^{17-i}$$

证明:

$f(19)=f(18)=1$ 显然。

假设现在从点 $a$ 走到了点 $b(a<b)$,为了经过 $a,b$ 之间的点,接下来只能从 $b$ 往回走,直到走到 $a+1$,接下来只能往标号更大的节点走,而且 $a+1,a+2,\cdots b-1,b$ 已经被经过了,所以接下来的方案数就是 $f(b)$ 。所以 $\forall 1\leq i<18,f(i) = \sum_{j=i+1}^{18} f(j)=2^{17-i}$ 。

对于节点0的连法就简单了,我们既然得到了这么多形如 $2^t$ 的 $f(i)$ ,那么直接将 $k$ 转成二进制表示之后连一下就好了。

代码

#include <bits/stdc++.h>
using namespace std; class HamiltonianConstruction {
public:
vector<string> construct(int k);
}gg;
vector<string> HamiltonianConstruction::construct(int k) {
vector<string> g;
int n=20;
string s="";
for (int i=0;i<20;i++)
s+="N";
g.clear();
for (int i=0;i<20;i++)
g.push_back(s);
for (int i=1;i<20;i++){
g[i][i-1]='Y';
for (int j=i+1;j<20-1;j++)
g[i][j]='Y';
}
g[18][19]='Y';
int c=17;
while (k){
if (k&1)
g[0][c]='Y';
k>>=1,c--;
}
return g;
}

  

TopCoder SRM704 Div1 800 构造的更多相关文章

  1. SRM 146 DIV1 800

    Problem Statement      The purpose of a roundabout is to control the flow of traffic at a busy inter ...

  2. TopCoder 649 div1 & div2

    最近一场TC,做得是在是烂,不过最后challenge阶段用一个随机数据cha了一个明显错误的代码,最后免于暴跌rating,还涨了一点.TC题目质量还是很高的,非常锻炼思维,拓展做题的视野,老老实实 ...

  3. TopCoder SRM500 Div1 250 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-250.html SRM500 Div1 250 题意 (看题用了半个小时--) 有 n 个人(编号 ...

  4. topcoder SRM642 div1 hard WheelofFortune

    题目链接:vjudge 大意:有两个人参加一场游戏,这个游戏在一个编号为\(0\text~n-1\)的轮盘上进行,一开始轮盘上的数字均为0:一共有\(m\)轮,每一轮都有一个操作参数\(s_i\),主 ...

  5. TopCoder SRM500 Div1 500 分治

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-500.html SRM500 Div1 500 没想到 double 的精度居然没有爆-- 考虑以 ...

  6. TopCoder SRM500 Div1 1000 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-1000.html SRM500 Div1 1000 设 \(v_1,v_2,\cdots ,v_9 ...

  7. TopCoder SRM502 Div1 500 贪心 01背包

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-500.html SRM502 Div1 500 好题. 首先,如果已经确定了解决所有问题的优先级, ...

  8. TopCoder SRM502 Div1 1000 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-1000.html SRM502 Div1 1000 题意 从 [0,n-1] 中选择 k 个不同的 ...

  9. topcoder SRM712 Div1 LR

    题目: Problem Statement      We have a cyclic array A of length n. For each valid i, element i-1 the l ...

随机推荐

  1. [CTSC2008]网络管理 [整体二分]

    题面 bzoj luogu 所有事件按时间排序 按值划分下放 把每一个修改 改成一个删除一个插入 对于一个查询 直接查这个段区间有多少合法点 如果查询值大于等于目标值 进入左区间 如果一个查询无解 那 ...

  2. java String转int int转化为String

    String转int String str = "123"; int a = Integer.parseInt(str); System.out.println(a); Integ ...

  3. 团体程序设计天梯赛(CCCC) L3021 神坛 的一些错误做法(目前网上的方法没一个是对的) 和 一些想法

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  4. CMDB服务器管理系统【s5day88】:采集资产之Agent、SSH和Salt模式讲解

    在对获取资产信息时,简述有四种方案. 1.Agent  (基于shell命令实现) 原理图 Agent方式,可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库 优点: ...

  5. LeetCode 92. ReverseLinkedII

    #include <iostream> using namespace std; struct ListNode { int val; ListNode *next; ListNode(i ...

  6. slot

    本文涉及的slot有:<slot>,v-slot吗,vm.$slots,vm.$scopedSlots 废弃的使用特性:slot,slot-scope,scope(使用v-slot,2.6 ...

  7. Django过滤器

    在项目目录下建立templatetags文件 夹 建立 my_filter.py文件 from django import template register = template.Library() ...

  8. SQL Server - group by

    转载自https://segmentfault.com/a/1190000006821331 在平时的开发任务中我们经常会用到MYSQL的GROUP BY分组, 用来获取数据表中以分组字段为依据的统计 ...

  9. jenkins备份与恢复【转】

    jenkins这里我通过thinbackup插件进行对jenkins的配置备份与恢复 1丶安装thinbackup插件 2丶系统管理选择thinbackup插件 3丶创建备份目录 mkdir /bac ...

  10. 【easy】226. Invert Binary Tree 反转二叉树

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...