\(\mathcal{Description}\)

  Link(削弱版).

  \(n\) 张纸叠在一起对折 \(k\) 次,然后从上到下为每层的正反两面写上数字,求把纸重新摊平后每张纸上的数字序列。

  \(n\le10\),\(k\le19\)。

\(\mathcal{Solution}\)

  模拟摊平操作,对于每一层维护一个双向链表(实际指针的方向并不重要,不要纠结两个叫 pre 的指针相互指的问题),每次把上一半的反向接到下一半即可。

  复杂度 \(\mathcal O(n2^k)\),瓶颈在 IO。

\(\mathcal{Code}\)

  1. #include <cstdio>
  2. #include <vector>
  3. #include <assert.h>
  4. typedef unsigned long long ULL;
  5. inline char fgc () {
  6. static char buf[1 << 17], *p = buf, *q = buf;
  7. return p == q && ( q = buf + fread ( p = buf, 1, 1 << 17, stdin ), p == q ) ? EOF : *p ++;
  8. }
  9. inline ULL rint () {
  10. ULL x = 0; char s = fgc ();
  11. for ( ; s < '0' || '9' < s; s = fgc () );
  12. for ( ; '0' <= s && s <= '9'; s = fgc () ) x = x * 10 + ( s ^ '0' );
  13. return x;
  14. }
  15. inline void wint ( const ULL x ) {
  16. if ( 9 < x ) wint ( x / 10 );
  17. putchar ( x % 10 ^ '0' );
  18. }
  19. const int MAXN = 10, MAXK = 19, MAXP = 1 << MAXK << 1, MAXL = MAXN << MAXK << 1;
  20. int n, K, perL, L, p[MAXL + 5];
  21. int pre[MAXP + 5], suf[MAXP + 5], lef[MAXP + 5], rig[MAXP + 5];
  22. std::vector<int> paper[MAXN + 5], fold;
  23. namespace Generator {
  24. const int threshold = 10000000;
  25. ULL k1,k2;
  26. ULL xorShift128Plus () {
  27. ULL k3 = k1, k4 = k2;
  28. k1 = k4, k3 ^= k3 << 23;
  29. k2 = k3 ^ k4 ^ ( k3 >> 17 ) ^ ( k4 >> 26 );
  30. return k2 + k4;
  31. }
  32. void gen ( int n, int k, ULL _k1, ULL _k2){
  33. k1 = _k1, k2 = _k2;
  34. int _len = 2 * n * ( 1 << k );
  35. for ( int i = 1; i <= _len; i ++ )
  36. p[i] = xorShift128Plus () % threshold + 1;
  37. }
  38. };
  39. inline void initFold ( std::vector<int>& res ) {
  40. int up = perL;
  41. for ( int i = up; i; -- i ) {
  42. lef[i] = rig[i] = up - i + 1;
  43. pre[i] = suf[i] = 0;
  44. }
  45. while ( up > 2 ) {
  46. int mid = up >> 1;
  47. for ( int i = mid + 1; i <= up; ++ i ) {
  48. int j = mid * 2 + 1 - i;
  49. if ( !suf[lef[i]] ) {
  50. assert ( !suf[lef[j]] );
  51. suf[lef[i]] = lef[j], suf[lef[j]] = lef[i];
  52. } else {
  53. assert ( !pre[lef[i]] && !pre[lef[j]] );
  54. pre[lef[i]] = lef[j], pre[lef[j]] = lef[i];
  55. }
  56. lef[j] = rig[i];
  57. }
  58. up = mid;
  59. }
  60. int i = lef[1], las = 0;
  61. for ( int i = lef[2], las = 0; ; ) {
  62. res.push_back ( i );
  63. if ( i == rig[2] ) break;
  64. int nxt = suf[i] ^ las ? suf[i] : pre[i];
  65. las = i, i = nxt;
  66. }
  67. for ( int i = lef[1], las = 0; ; ) {
  68. res.push_back ( i );
  69. if ( i == rig[1] ) break;
  70. int nxt = suf[i] ^ las ? suf[i] : pre[i];
  71. las = i, i = nxt;
  72. }
  73. }
  74. int main () {
  75. freopen ( "folding.in", "r", stdin );
  76. freopen ( "folding.out", "w", stdout );
  77. for ( int T = rint (), type = rint (); T --; ) {
  78. n = rint (), K = rint (), perL = 1 << K << 1, L = n * perL;
  79. if ( !type ) for ( int i = 1; i <= L; ++ i ) p[i] = rint ();
  80. else {
  81. ULL k1 = rint (), k2 = rint ();
  82. Generator::gen ( n, K, k1, k2 );
  83. }
  84. for ( int i = 1; i <= L; ++ i ) { // attention that K>0.
  85. int r = ( i - 1 ) % ( n << 2 ) + 1;
  86. if ( r <= n << 1 ) {
  87. paper[n - ( r - 1 ) / 2].push_back ( p[i] );
  88. } else {
  89. paper[( r - ( n << 1 ) - 1 ) / 2 + 1].push_back ( p[i] );
  90. }
  91. }
  92. initFold ( fold );
  93. ULL ans = 0;
  94. for ( int i = 1, id = 0; i <= n; ++ i ) {
  95. for ( int j = 0; j < perL; ++ j ) {
  96. ans ^= 1ll * ++ id * paper[i][fold[j] - 1];
  97. }
  98. paper[i].clear ();
  99. }
  100. wint ( ans ), putchar ( '\n' );
  101. }
  102. return 0;
  103. }

\(\mathcal{Details}\)

  为什么这种大模拟兔子会想到去找规律……

  关键是死也没找出来!

  联赛难度联赛难度啊你姿势摆对啊喂 qwq!

Solution -「LOCAL」「cov. HDU 6816」折纸游戏的更多相关文章

  1. Solution -「LOCAL」「cov. HDU 6864」找朋友

    \(\mathcal{Description}\)   Link.(几乎一致)   给定 \(n\) 个点 \(m\) 条边的仙人掌和起点 \(s\),边长度均为 \(1\).令 \(d(u)\) 表 ...

  2. Solution -「CTS 2019」「洛谷 P5404」氪金手游

    \(\mathcal{Description}\)   Link.   有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \ ...

  3. 「题解」「美团 CodeM 资格赛」跳格子

    目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...

  4. 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇

    http://www.4gamer.net/games/216/G021678/20140714079/     连载第2回的本回,  Arc System Works开发的格斗游戏「GUILTY G ...

  5. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory

    Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...

  6. SSH连接时出现「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解决办法

    用ssh來操控github,沒想到連線時,出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」,後面還有一大串英文,這時當然要向Google大神求助 ...

  7. 「Windows MFC 」「Edit Control」 控件

    「Windows MFC 」「Edit Control」 控件

  8. 「ZJOI2019」&「十二省联考 2019」题解索引

    「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...

  9. Loj #6069. 「2017 山东一轮集训 Day4」塔

    Loj #6069. 「2017 山东一轮集训 Day4」塔 题目描述 现在有一条 $ [1, l] $ 的数轴,要在上面造 $ n $ 座塔,每座塔的坐标要两两不同,且为整点. 塔有编号,且每座塔都 ...

随机推荐

  1. linux清理缓存cache

    Linux服务器有自己先进的内存管理机制,有时候会发现我们系统的buff/cache内存占用会越来越高,操作系统也有卡顿的情况,遇到这种情况,不妨试试下面的方法. 步骤一:我们先使用free -m查看 ...

  2. PAT 乙级 1001. 害死人不偿命的(3n+1)猜想 (15)(C语言描述)

    卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...

  3. kubernetes运行应用2之DaemonSet详解

    kubernetes运行应用1之Deployment详解   查看daemonset 如下,k8s自身的 DaemonSet kube-flannel-ds和kube-proxy分别负责在每个结点上运 ...

  4. Cesium源码剖析---Post Processing之物体描边(Silhouette)

    Cesium在1.46版本中新增了对整个场景的后期处理(Post Processing)功能,包括模型描边.黑白图.明亮度调整.夜视效果.环境光遮蔽等.对于这么炫酷的功能,我们绝不犹豫,先去翻一翻它的 ...

  5. 使用 fail2ban 保护 frp 服务

    背景 我们一般会使用 fail2ban 来保护暴露到公网的提供密码登录的 ssh 连接等. 但使用 frp 穿透后所有的从外网访问都会变成 127.0.0.1 进入的,原本能用 fail2ban 保护 ...

  6. 在3G移动通信网络信令流程里获取用户电话号的一种方法(中国电信cdma2000)

    首先这些关于电话号的的寻找都是在分组域进行的 然后是首先在rp接口的A11接口寻找,没有看到,于是到pi接口,研究radius协议 发现在协议里也不含有与用户电话号码mdn相关的元素 然后偶遇一篇文档 ...

  7. MyCms 开源自媒体系统,系统配置字段说明

    功能说明 站点名称:站点的简要描述名称,没有启用SEO插件时,将用此字段用作站点标题. 站点地址:站点的完整地址(包含 http/https),此字段有多处依赖用于生成链接,请正确填写. 站点logo ...

  8. gin中如何记录日志和错误日志

    package main import ( "github.com/gin-gonic/gin" "io" "os" ) func main ...

  9. gin中的多模板和模板继承的用法

    1. 简单用法 package main import ( "github.com/gin-contrib/multitemplate" "github.com/gin- ...

  10. Go 常用函数

    #### Go 常用函数,错误处理这一节我们来学习一下Go 常用的函数,这些函数有些是内置的,有些是官方标准库内的, 熟悉这些函数对程序开发来讲还是很重要的; 1. len("abc&quo ...