题目链接:点击查看

题目大意:需要设计一个游戏关卡,由 01 字符串组成,1 表示存档点,0 表示普通关卡,规定每一步可以从第 i 个关卡前进到第 i + 1 个关卡,不过有 1/2 的概率会成功,剩下 1/2 的概率会失败,失败的话会返回最近的存档点重新开始,现在问如何设计关卡,可以使得到达终点的期望为 k

题目分析:首先不难看出,每经过一个存档点后,前面的关卡都已经对后续的期望没有影响了,换句话说相邻的两个存档点组成的一段关卡是互相独立的

所以我们只需要分析诸如 11 , 101 , 1001 , ... 也就是相邻两个存档点之间 0 的个数与期望的关系即可

首先不难看出,如果是 11 的话,那么第一步如果失败,那么第二步按理来说会成功,所以期望是 2

101 的话,自己手玩一下不难看出期望是 6,根据手玩的过程也不难看出期望的递推式是 f[ i ] = ( f[ i - 1 ] + 1 ) * 2

打个表去 OIES 找一下规律,可以发现公式就是 

结合上文中提到的,相邻两个存档点组成的一段关卡是相互独立的,就可以对题目中给出的 k 进行二进制拆分了,每次用 2^1 和 2^x 去构造,操作复杂度大概是 n * ( n - 1 ) / 2 ,n 是 60,最后结果远小于 2000

又因为此处最小只能构造出 2^1 = 2,无法构造出 2^0 = 1,所以奇数一律无解

代码:

//#pragma GCC optimize(2)
//#pragma GCC optimize("Ofast","inline","-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e6+100;int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.ans.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){LL n;scanf("%lld",&n);if(n&1){puts("-1");continue;}vector<int>ans;for(int i=1;i<=60;i++)if((n>>i)&1){ans.push_back(1);//2if(i>1)//2^n-2{for(int j=1;j<i-1;j++)ans.push_back(0);ans.push_back(1);}}printf("%d\n",ans.size());for(auto it:ans)printf("%d ",it);puts("");}return 0;
}

CodeForces - 1453D Checkpoints(概率+构造)相关推荐

  1. CodeForces - 287C Lucky Permutation(构造)

    题目链接:点击查看 题目大意:构造一个合法的排列,满足 ppi=n−i+1p_{p_{i}}=n-i+1ppi​​=n−i+1 题目分析:因为第四个样例的存在降低了本题的难度,不然感觉还是有点难度的一 ...

  2. CodeForces - 468C Hack it!(构造+数位dp)

    题目链接:点击查看 题目大意:求出一段区间 [l,r][l,r][l,r] 的数位和对 aaa 取模后为 000.更具体的,设 f(x)f(x)f(x) 为 xxx 的数位和,本题需要求出一对 [l, ...

  3. CodeForces - 1561E Bottom-Tier Reversals(构造)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的排列,每次操作可以选择一个奇数长度的前缀然后反转,需要构造一种方案,使得在不超过 5n2\frac{5n}{2}25n​ 次操作后使得序列有序 ...

  4. CodeForces - 1494E A-Z Graph(构造+思维)

    题目链接:https://vjudge.net/problem/CodeForces-1494E 题目大意:给出一个初始时只有 nnn 个点的有向带权图,需要执行 mmm 次操作,每次操作分为下列三种 ...

  5. CodeForces - 1494D Dogeforces(贪心+构造)

    题目链接:点击查看 题目大意:给出 nnn 个叶子结点和一个 n∗nn*nn∗n 的 LCALCALCA 矩阵,其中 LCALCALCA 表示的是最近公共祖先节点的权值,现在需要构造出一棵自顶向下权值 ...

  6. CodeForces - 148C Terse princess (构造)

    题目链接:http://codeforces.com/problemset/problem/148/C点击打开链接 C. Terse princess time limit per test 1 se ...

  7. [ An Ac a Day ^_^ ] CodeForces 468A 24 Game 构造

    题意是让你用1到n的数构造24 看完题解感觉被样例骗了-- 很明显 n<4肯定不行 然后构造出来4 5的组成24的式子 把大于4(偶数)或者5(奇数)的数构造成i-(i-1)=1 之后就是无尽的 ...

  8. Codeforces 550D. Regular Bridge 构造

    求一个图,每一个点的度数都为K并且必须至少要有一个桥. 构造题: 仅仅有k为奇数的时候有解, 构造这种一个图,左边一团有 k+1 个点 , 右边一团也有 k+1 个点, 中间经过 m1 , m2 连着 ...

  9. CodeForces - 1316D Nash Matrix(构造+dfs)

    题目链接:点击查看 题目大意:给出一个 n * n 的矩阵,初始时每个格子都为空,现在要求我们自己用 ' R ' , ' L ' , ' U ' , ' D ' 和 ' X ' 填充,分别表示在每个格 ...

最新文章

  1. Castle IOC容器快速入门
  2. Codeforces - 662A 思路巧妙的异或
  3. Window10+Python3.5安装opencv
  4. 通过exp命令对Oracle数据库进行备份操作(提供两种情况的备份:备份本地,备份远程的数据库)
  5. mybatis入门案例
  6. 编写Javascript时的注意事项
  7. 千万别让海底捞知道你的生日
  8. MAX31855 热电偶至数字输出转换器
  9. Highcharts使用表格数据绘制图表
  10. 动态规划--代码随想录
  11. Yii 2.0 权威指南 (6) 请求处理
  12. 深度学习-深度卷积神经网络发展
  13. Triangle 三角形求最小路径和 @leetcode
  14. 无人机飞控技术最详细解读
  15. pDC 与 GetDC() 区别
  16. 最新-2020年必须缴费注册苹果开发者账号才能申请ios证书
  17. 书评|《小岛经济学》
  18. LDAP简述及统一认证说明
  19. 为博客添加樱花飘落的效果
  20. DICOM:开源DICOM服务框架DCM4CHE构建的准备

热门文章

  1. 接口调试利器:Postman
  2. SpringSecurity分布式整合之jwt和rsa说明
  3. SpringSecurity认证流程分析
  4. 自定义镜像-Dockerfile
  5. zookeeper的名词复盘-Stat状态信息
  6. maven依赖管理的概念
  7. Java实现消息消费
  8. 上传问题分析1--文件保存位置
  9. 基于XML的AOP实现事务控制
  10. StringBuilder的构造方法和append方法