题目即要求构造一个长为$2n$的序列$a_{i}$,满足$\forall 1\le i\le n$,$i$恰好出现两次,假设分别是$a_{x}=a_{y}=i(x<y)$,即要求$y-x=i$

(输出序列即对于所有$i$,依次输出其第一次出现的位置$x$即可)

考虑$S_{1}=\sum_{i=1}^{n}x$(定义与之前相同)和$S_{2}=\sum_{i=1}^{n}y$,满足$\begin{cases}S_{2}-S_{1}=\frac{n(n+1)}{2}\\S_{1}+S_{2}=n(2n+1)\end{cases}$,将两式相减即可解得$S_{1}=\frac{n(3n+1)}{4}\in Z$

因此,有解的必要条件即$n\equiv 0,1(mod\ 4)$

接下来,对$n$分类讨论,并构造对应$a_{i}$:

当$n=4k$,令$a_{i}$为以下序列即可——
$$
\{4k,4k-2,...,2\}\{4k-1\}\{2,4,...,4k\}\\\{2k-1\}\{4k-3,4k-5,...,2k+1\}\{2k-3,2k-5,...,3\}\\\{4k-1,2k-1\}\{3,5,...,2k-3\}\{1,1\}\{2k+1,...,4k-3\}
$$
(特别的,当$n=4$时前者构造不合法,可以令$a_{i}=\{1,1,3,4,2,3,2,4\}$)

当$n=4k+1$,令$a_{i}$为以下序列即可——
$$
\{4k+1\}\{4k-2,4k-4...,2\}\{4k\}\{2,4,...,4k-2\}\\\{2k+1,4k+1\}\{4k-1,4k-3,...,2k+3\}\{2k-1,2k-3,...,3\}\\\{4k,2k+1\}\{3,5,...,2k-1\}\{1,1\}\{2k+3,2k+5,...,4k-1\}
$$

  1. 1 #include<bits/stdc++.h>
  2. 2 using namespace std;
  3. 3 #define N 1000005
  4. 4 int n,a[N<<1],ans[N];
  5. 5 void add(int x){
  6. 6 a[++a[0]]=x;
  7. 7 }
  8. 8 int main(){
  9. 9 scanf("%d",&n);
  10. 10 if ((n%4==2)||(n%4==3)){
  11. 11 printf("-1");
  12. 12 return 0;
  13. 13 }
  14. 14 if (n==4){
  15. 15 printf("1 5 3 4");
  16. 16 return 0;
  17. 17 }
  18. 18 if (n%4==0){
  19. 19 int k=n/4;
  20. 20 for(int i=4*k;i>=2;i-=2)add(i);
  21. 21 add(4*k-1);
  22. 22 for(int i=2;i<=4*k;i+=2)add(i);
  23. 23 add(2*k-1);
  24. 24 for(int i=4*k-3;i>=2*k+1;i-=2)add(i);
  25. 25 for(int i=2*k-3;i>=3;i-=2)add(i);
  26. 26 add(4*k-1),add(2*k-1);
  27. 27 for(int i=3;i<=2*k-3;i+=2)add(i);
  28. 28 add(1),add(1);
  29. 29 for(int i=2*k+1;i<=4*k-3;i+=2)add(i);
  30. 30 }
  31. 31 else{
  32. 32 int k=n/4;
  33. 33 add(4*k+1);
  34. 34 for(int i=4*k-2;i>=2;i-=2)add(i);
  35. 35 add(4*k);
  36. 36 for(int i=2;i<=4*k-2;i+=2)add(i);
  37. 37 add(2*k+1),add(4*k+1);
  38. 38 for(int i=4*k-1;i>=2*k+3;i-=2)add(i);
  39. 39 for(int i=2*k-1;i>=3;i-=2)add(i);
  40. 40 add(4*k),add(2*k+1);
  41. 41 for(int i=3;i<=2*k-1;i+=2)add(i);
  42. 42 add(1),add(1);
  43. 43 for(int i=2*k+3;i<=4*k-1;i+=2)add(i);
  44. 44 }
  45. 45 for(int i=1;i<=a[0];i++)
  46. 46 if (!ans[a[i]])ans[a[i]]=i;
  47. 47 for(int i=1;i<=n;i++)printf("%d ",ans[i]);
  48. 48 }

[gym103055H]Grammy and HearthStone的更多相关文章

  1. HDU 5816 Hearthstone

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Descript ...

  2. HDU5816 Hearthstone(状压DP)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5816 Description Hearthstone is an online collec ...

  3. 多校7 HDU5816 Hearthstone 状压DP+全排列

    多校7 HDU5816 Hearthstone 状压DP+全排列 题意:boss的PH为p,n张A牌,m张B牌.抽取一张牌,能胜利的概率是多少? 如果抽到的是A牌,当剩余牌的数目不少于2张,再从剩余牌 ...

  4. HDU 5816 Hearthstone (状压DP)

    Hearthstone 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5816 Description Hearthstone is an onlin ...

  5. HDU5816 Hearthstone

    Hearthstone                                                                        Time Limit: 2000/ ...

  6. HDU 5816 Hearthstone 概率dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5816 Hearthstone Time Limit: 2000/1000 MS (Java/Othe ...

  7. hdu-5816 Hearthstone(状压dp+概率期望)

    题目链接: Hearthstone Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Other ...

  8. Google Deepmind AI tries it hand at creating Hearthstone and Magic: The Gathering cards

    http://www.techrepublic.com/article/google-deepmind-ai-tries-it-hand-at-creating-hearthstone-magic-t ...

  9. Programming a Hearthstone agent using Monte Carlo Tree Search(chapter one)

    Markus Heikki AnderssonHåkon HelgesenHesselberg Master of Science in Computer Science Submission dat ...

随机推荐

  1. MyCat的快速搭建

    1. 概述 老话说的好:一个好汉三个帮,一个人再聪明.再有本事,也要借助他人的力量,才能成功. 言归正传,今天我们来聊聊 MyCat的快速搭建. 2. 场景介绍 服务器A IP:192.168.1.2 ...

  2. (googlechrome)未知错误导致安装失败,如果googlechrome....

    ​https://jingyan.baidu.com/article/ea24bc39ffb699da63b33147.html#5827690-tsina-1-63512-fe183374908e7 ...

  3. 洛谷2120 [ZJOI2007]仓库建设(斜率优化dp)

    感觉和锯木厂那个题很类似的. 其实这个题还那个题唯一的区别就是\(dp\)转移式子中的\(f\)变成了\(g\) qwq不想多说了 直接看我的前一篇题解吧qwq #include<iostrea ...

  4. 洛谷2149 Elaxia的路线(dp+最短路)

    QwQ好久没更新博客了,颓废了好久啊,来补一点东西 题目大意 给定两个点对,求两对点间最短路的最长公共路径. 其中\(n,m\le 10^5\) 比较简单吧 就是跑四遍最短路,然后把最短路上的边拿出来 ...

  5. 微软Windows11安卓子系统已支持运行APK 应用(附手把手详细安装攻略)怎么安装安卓/如何安装安卓应用/支持多窗口多任务

    ​​ 10 月 21 日消息,微软博客宣称,Windows 11 上 安卓子系统运行 Android  应用程序的第一个预览版现已提供给美国 Beta 频道的 Windows 内部人员.但现在通过教程 ...

  6. Coursera Deep Learning笔记 深度卷积网络

    参考 1. Why look at case studies 介绍几个典型的CNN案例: LeNet-5 AlexNet VGG Residual Network(ResNet): 特点是可以构建很深 ...

  7. 【二食堂】Alpha - Scrum Meeting 9

    Scrum Meeting 9 例会时间:4.19 13:00~13:20 进度情况 组员 昨日进度 今日任务 李健 1. "文本区域"栏目完成,可实现实体和关系的添加issue ...

  8. BUAA-OO-JML

    BUAA-OO-JML JML 概念与 toolchain JML 是一种为 Java 程序设计的.遵循 design by contract 范式的.基于 Hoare Logic 构建的 behav ...

  9. Apache Kafka 学习笔记

    1. 介绍Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 这种动 ...

  10. 查找最小生成树:普里姆算法算法(Prim)算法

    一.算法介绍 普里姆算法(Prim's algorithm),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之 ...