[CQOI 2018]九连环

时间:2022-12-30 17:06:05

Description

题库链接

给你一个 \(n\) 连环,游戏规则是:

  1. 第一个(最右边)环任何时候都可以任意装上或卸下;
  2. 如果第 \(k\) 个环没有被卸下,且第 \(k\) 个环右边的所有环都被卸下,则第 \(k+1\) 个环(第 \(k\) 个环左边相邻的环)可以任意装上或卸下。

现在 \(m\) 组询问,每组询问给你 \(n\) 连环,问你至少多少步取下所有的环。

\(1\leq n\leq 10^5,1\leq m\leq 10\)

Solution

数学书上推导很清楚了:

[CQOI 2018]九连环

[CQOI 2018]九连环

值得注意的是第二张图片中的 \(n\) 为奇数的推导式中 \(\frac{2(1-2^{n+1})}{1-2^2}\) 应该是 \(\frac{1-2^{n+1}}{1-2^2}\)

有幸能指出数学书的错误。

然后 \(\text{FFT}\) 快速幂乱搞就好了。不开 \(-O2\) 玩 \(\text{FFT}\) 不就是在玩火吗???

Code

这个瓜皮代码常数过大在 b 站上过不了。

#include <bits/stdc++.h>
#define dob complex<double>
using namespace std;
const int N = (100000<<2)+5;
const double pi = acos(-1.); int n, nn, m, len, L, R[N], A[N];
dob a[N], b[N]; void FFT(dob *A, int o) {
for (int i = 0; i < len; i++) if (i < R[i]) swap(A[i], A[R[i]]);
for (int i = 1; i < len; i <<= 1) {
dob wn(cos(pi/i), sin(pi*o/i)), x, y;
for (int j = 0; j < len; j += (i<<1)) {
dob w(1, 0);
for (int k = 0; k < i; k++, w = w*wn) {
x = A[j+k], y = w*A[i+j+k];
A[j+k] = x+y, A[i+j+k] = x-y;
}
}
}
}
void work() {
scanf("%d", &n); nn = n; ++n; m = log(2)*n+5;
for (L = 0, len = 1; len <= m; len <<= 1) ++L;
for (int i = 0; i < len; i++) a[i] = b[i] = 0;
for (int i = 0; i < len; i++) R[i] = (R[i>>1]>>1)|((i&1)<<(L-1));
a[0] = 1, b[0] = 2;
while (n) {
FFT(a, 1), FFT(b, 1);
if (n&1) for (int i = 0; i <= len; i++) a[i] = a[i]*b[i];
for (int i = 0; i <= len; i++) b[i] = b[i]*b[i]; n >>= 1;
FFT(a, -1); FFT(b, -1);
for (int i = 0; i < len; i++) A[i] = a[i].real()/len+0.5;
int loc = 0; while (A[loc] && loc < len) A[loc+1] += A[loc]/10, A[loc] %= 10, ++loc;
for (int i = 0; i < len; i++) a[i] = A[i];
for (int i = 0; i < len; i++) A[i] = b[i].real()/len+0.5;
loc = 0; while (A[loc] && loc < len) A[loc+1] += A[loc]/10, A[loc] %= 10, ++loc;
for (int i = 0; i < len; i++) b[i] = A[i];
}
for (int i = 0; i < len; i++) A[i] = a[i].real();
A[0] -= 1+(!(nn&1));
for (int i = len-1, flag = 0, sum = 0; i >= 0; i--) {
sum = sum*10+A[i]; if (sum/3) flag = 1;
if (flag) printf("%d", sum/3), sum %= 3;
}
puts("");
}
int main() {int t; cin >> t; while (t--) work(); return 0; }

[CQOI 2018]九连环的更多相关文章

  1. 「杂录」CQOI 2018 背板记

    背景 经过一天天的等待,终于迎来了\(CQOI2018\),想想\(NOIp\)过后到现在,已经有了快要半年了,曾经遥遥无期,没想到时间一转眼就过去了-- 日志 \(Day0\) 因为明天就要考试了, ...

  2. &lbrack;CQOI 2018&rsqb;异或序列&amp&semi;&lbrack;Codeforces 617E&rsqb;XOR and Favorite Number

    Description 题库链接1 题库链接2 已知一个长度为 \(n\) 的整数数列 \(a_1,a_2,\cdots,a_n\) ,给定查询参数 \(l,r\) ,问在 \([l,r]\) 区间内 ...

  3. &lbrack;CQOI 2018&rsqb;解锁屏幕

    Description 题库链接 给出平面上 \(n\) 个点,一开始你可以选任何一个点作为起点,接着对于每一个你在的位置,你可以选取一个未走过的点.将路径(线段)上所有的点均选上(包括起点终点),并 ...

  4. &lbrack;CQOI 2018&rsqb;破解D-H协议

    Description 题库链接 给出 \(A,B,P,g\) ,\(g\) 是 \(P\) 的原根,求出 \(A\equiv g^a\pmod{P}\) , \(B\equiv g^b\pmod{P ...

  5. &lbrack;CQOI 2018&rsqb;交错序列

    Description 题库链接 定义长度为 \(n\) 的"交错序列"为:长度为 \(n\) 序列中仅含 \(0,1\) 且没有相邻的 \(1\) .给出 \(a,b\) ,假设 ...

  6. &lbrack;CQOI 2018&rsqb;社交网络

    Description 题库链接 求 \(n\) 个点以 \(1\) 为根的有向生成树个数. \(1\leq n\leq 250\) Solution 我终于会 \(\texttt{Matrix-Tr ...

  7. &lbrack; CQOI 2018 &rsqb; 异或序列

    \(\\\) Description 给出一个长为 \(n\) 的数列 \(A\) 和 \(k\),多次询问: 对于一个区间 \([L_i,R_i]\),问区间内有多少个不为空的子段异或和为 \(k\ ...

  8. &num; BZOJ5300 &lbrack;CQOI2018&rsqb;九连环 题解 &vert; 高精度 FFT

    今天做了传说中的CQOI六道板子题--有了一种自己很巨的错觉(雾 题面 求n连环的最少步数,n <= 1e5. 题解 首先--我不会玩九连环-- 通过找规律(其实是百度搜索)可知,\(n\)连环 ...

  9. 2018&period; The Debut Album

    http://acm.timus.ru/problem.aspx?space=1&num=2018 真心爱过,怎么能彻底忘掉 题目大意: 长度为n的串,由1和2组成,连续的1不能超过a个,连续 ...

随机推荐

  1. JS实战 &&num;183&semi; 零碎笔记

    onclick:单击时触发事件 onmouseover:鼠标进入时触发事件 onmouseout:鼠标离开时触发事件   事件三要素:最基础的内容 事件源:有监听的HTML 标签,能响应事件的HTML ...

  2. cocoapods 更新失败 bad response Not Found 404 &lpar;http&colon;&sol;&sol;ruby&period;taobao&period;org&sol;specs&period;4&period;8&period;gz&rpar;

    http://blog.csdn.net/dark_gmn/article/details/49274993 ERROR:  Could not find a valid gem 'cocoapods ...

  3. Visual Studio 常用快捷键 &lpar;二&rpar;

    想不到上一篇 [Visual Studio 常用快捷键] 受这么多人的欢迎.看来大家对Visual Studio的用法非常感兴趣. 接下来我准备写一个 “Visual Studio使用技巧 ” 一个系 ...

  4. 怎么在SQL Server 2008中还原&period;mdf数据文件

    还原数据库文件的过程中,只有mdf文件,该怎么还原?在原来的SQL Server 2005中直接点击数据库然后附加就可以还原,但是在2008 版本中附加数据库文件则会出错(只有mdf文件){执行Tra ...

  5. 结合Pnotify插件--app-jquery-notify&period;js

    $.NOTIFY = { showSuccess : function (title, text, context) { var opt = { title : title, text : text, ...

  6. Duplicate column name &&num;39&semi;vocabulary&&num;39&semi;

    创建一个视图: 报错:Duplicate column name 'vocabulary' 意思是视图select的列名重复了,取别名 改成这样就ok了

  7. AOJ 2249 Road Construction (dijkstra)

    某国王需要修路,王国有一个首都和多个城市,需要修路.已经有修路计划了,但是修路费用太高. 为了减少修路费用,国王决定从计划中去掉一些路,但是需要满足一下两点: 保证所有城市都能连通 所有城市到首都的最 ...

  8. ActiveMQ的应用实例

    一.部署和启动ActiveMQ 去官网下载:http://activemq.apache.org/ 我下载的是apache-activemq-5.12.0-bin.tar.gz, 解压到本地目录,进入 ...

  9. ASM路径问题导致数据库不能正常启动 -- 报&colon;ORA-03113&colon; end-of-file on communication channel

    环境描述: 操作系统版本:Red Hat Enterprise Linux Server release 6.5 (Santiago) 数据库版本:Oracle 11.2.0.4 RAC 场景描述: ...

  10. 【UVA534】Frogger 最小瓶颈路

    题目大意:给定一张 N 个点的完全图,求 1,2 号节点之间的一条最小瓶颈路. 题解:可知,最小瓶颈路一定存在于最小生成树(最小瓶颈树)中.因此,直接跑克鲁斯卡尔算法,当 1,2 号节点在同一个联通块 ...