hdu4696 Answers(循环节+找规律)

题意:

分析:

容易想到先把T数组按位置和对应权值建一个有向图(类似置换群那种指法)

然后图建完了,如果C[]里面都是2,那显然只能凑出那些偶数,奇数是不能凑出来的

如果C[]有1有2呢?

事实上是可以凑出所有自然数的……

找一个含有数字1的棒棒糖图形(先一条链,后一个环)

1)如果环中全是2,没有1

   从起点一直走下去一定是这样一个情况.......12222222222.....

   我们发现可以根据12222222.....来凑出所有数

2)如果环中有1,那么我们可以用数学归纳法来证明,假设1~x-1都能凑出来

  那么对于我们x-1时候的答案,总和差1,我们可以让它右边界扩展:

    如果进来了一个1,那么ok,凑出来了;

    如果没有,则进来的是2,我们让左边出来一个,如果出来的是1,那么ok,否则则继续进行操作

  我们发现这个操作是可以有限次结束的,因为如果无限次结束,那么就说明一直进出的都是222222,说明我们陷入了一个只有2的循环,但是这种情况是在环中有1的情况下的,所以是不会无限次进行的

于是就得出了一个神奇的结论:如果C[]中有1,那么所有正整数询问都可以凑出来,如果没有,那么只能凑出那些正偶数询问

时间: 2024-10-14 22:12:26

hdu4696 Answers(循环节+找规律)的相关文章

Codeforces 492D Vanya and Computer Game 循环节找规律

题目链接:点击打开链接 题意: 给定n只怪物的血量,x', y 第一个人每秒钟攻击x次,第二个人每秒钟攻击y次 每次攻击给所有存活的怪物造成一点伤害. 问每只怪物最后一击是谁打死的 思路:xy的最小公倍数内有个循环节,先跑出这个循环节(同时攻击时造成2点伤害,就在循环节里加2次both) 然后对于每只怪只要关心在循环节里坐落在哪个攻击点就好了 #include<bits/stdc++.h> using namespace std; const int maxn=2000010; int v[m

1005:取余,循环,找规律

Problem Description A number sequence is defined as follows:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.Given A, B, and n, you are to calculate the value of f(n). Input The input consists of multiple test cases. Each test case cont

数论基础——循环节和矩阵快速幂的运用

首先我们来看一道基础题: 题目链接:HDU1005 Number Sequence 题目描述: Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 147421    Accepted Submission(s): 35814 Problem Description A number sequence is

HDU1799 循环多少次?【找规律】

循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2821    Accepted Submission(s): 1022 Problem Description 我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分.例如, 如果代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP运算

hdu1005 超规模&amp;gt;&amp;gt;找规律&amp;gt;&amp;gt;有限次数循环

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1005 //由于题目有两项在变,一项有7种可能,全部共同拥有49种情况. /* 超规模>>算法优化 >>找规律>>规律变化 >>有限次数内循环>>找到变化范围 */ int main() { int f[51]={49,1,1}; int a,b,n,i; while( cin>>a>>b>>n,a+b+n){ fo

特征根法求通项+广义Fibonacci数列找循环节 - HDU 5451 Best Solver

Best Solver Problem's Link Mean: 给出x和M,求:(5+2√6)^(1+2x)的值.x<2^32,M<=46337. analyse: 这题需要用到高中的数学知识点:特征根法求递推数列通项公式. 方法是这样的: 对于这题的解法: 记λ1=5+2√6,λ2=5-2√6,则λ1λ2=1,λ1+λ2=10 根据韦达定理可以推导出:λ1,λ2的特征方程为 x^2-10x+1=0 再使用该特征方程反向推导出递推公式为:a[n]=10*a[n-1]-a[n-2] 再由特征根

2016&quot;百度之星&quot; - 初赛(Astar Round2A)1001 All X(HDU5690)——找循环节|快速幂

一个由m个数字x组成的新数字,问其能否mod k等于c. 先提供第一种思路,找循环节.因为每次多一位数都是进行(t*10+x)mod k(这里是同余模的体现),因为x,k都确定,只要t再一样得到的答案一定一样.所以在一步一步中进行时一旦出现了一个之前出现过的数字,那么很显然后面就要开始进行循环了.找出这个循环节,然后把m放到这个循环节里头就行(这里的说法有问题,见下文的第二点). 但是这里有两个要注意的地方,第一是只有当前出现的数一样才能保证下一个出现的数一样,而并不代表着,当前的数一样,得到它

Hdu 5451 Best Solver (2015 ACM/ICPC Asia Regional Shenyang Online) 暴力找循环节 + 递推

题目链接: Hdu  5451  Best Solver 题目描述: 对于,给出x和mod,求y向下取整后取余mod的值为多少? 解题思路: x的取值为[1, 232],看到这个指数,我的心情是异常崩溃的.(吐血......) 可是仔细观察,它指数大,可是mod小啊,它吓人,可是可以暴力搞啊!! 这个题目一个难点就是要向下取整求余,详解见传送门,本题是向下取整,也就是向上取整加一. 还有就是指数太大,要找到循环节,其实由于mod小,循环节并没有太大,暴力跑就ok啦!  此刻内心是崩溃的 1 #i

HDU 4731 Minimum palindrome 打表找规律

题目链接 虽然想到了可能有规律,但是比赛的时候没有去仔细推敲. 暴力打表找出可以得到对应的长度n和对应字符集m所对应的答案 10 1 1 1 a 2 2 aa 3 3 aaa 4 4 aaaa 5 5 aaaaa 6 6 aaaaaa 7 7 aaaaaaa 8 8 aaaaaaaa 9 9 aaaaaaaaa 10 10 aaaaaaaaaa 20 2 1 1 a 2 1 ab 3 2 aab 4 2 aabb 5 3 aaaba 6 3 aaabab 7 3 aaababb 8 3 aaab