2018ICPC网络赛(徐州站)A题题解
一、题目链接
https://nanti.jisuanke.com/t/31453
二、题意
给定$N$个位置,$2^k$种颜色,让你去涂色,条件是相邻的两种颜色类型异或值的二进制表示不全为$1$(以下简称:异或值不全为$1$),注意,颜色类型的数字是$k$位,不是$32$位,也是$64$位,不要想当然。然后,要注意这$N$个位置是环形的。
三、思路
比较朴素且容易想到的做法:$dp$递推计数。
设$dp[i][0]$表示,在前$i$个位置中,第$i$个位置的颜色和第一个位置的颜色相等的方案数;(这里的“第一个位置”待会儿解释,把题目背景想象成一排就好了);
$dp[i][1]$表示,在前$i$个位置中,第$i$个位置的颜色和第一个位置的颜色异或值为全$1$的方案数;
$dp[i][2]$表示,在前$i$个位置中,第$i$个位置的颜色不是以上两种的其他选取方式(以下简称:取其他的)的方案数;
那么,初始状态:$dp[1][0]=2^k,dp[1][1]=0,dp[1][2]=0$;递推式:
$dp[i][0]=dp[i-1][0]+dp[i-1][2]$,表示:如果第$i$个位置取和第一个位置相等的数字,那么可以由前一个位置取和第一个位置相等的状态,以及由前一个位置取其他数字的方案数转移过来;
$dp[i][1]=dp[i-1][1]+dp[i-1][2]$,表示:如果第$i$个位置取和第一个位置的颜色异或值为全$1$的数字,那么可以由前一个位置取和第一个位置的颜色异或值为全$1$的状态,以及由前一个位置取其他的数字的方案数转移过来;
$dp[i][2]=dp[i-1][0]*(2^k-2)+dp[i-1][1]*(2^k-2)+dp[i-1][2]*(2^k-3)$,表示:如果第$i$个位置取其他的数字,如果前一个位置取的是和第一个位置相等的数字($0$状态),那么,第$i$个位置不能取和第一个位置相等的,也不能取和前一个位置(即和第一个位置相等的那个数字)异或为全$1$的,那么只能取剩余的$2^k-2$种数字。如果前一个位置取的是和第一个位置的颜色异或值为全$1$的数字($1$状态),那么,第$i$个位置不能取和前一个位置的颜色异或值为全$1$的数字,也就是不能取和第一个位置的数字相等的数字,同时也不能取和第一个位置的数字异或为全$1$的,那么只能取剩余的$2^k-2$种数字。如果前一个位置取的是其他数字($2$状态),那么第$i$个位置不能取和第一个位置的数字相等的数字,也不能取和第一个位置的颜色异或值为全$1$的数字,同时也不能取和前一个位置的颜色异或值为全$1$的数字,那么只能取剩余的$2^k-3$种数字。
最后的答案就是$dp[N][0]+dp[N][2]$,即最后一个位置的数字可以取和第一个个位置相等的,也可以取其他的。
注意,这个地方比较绕,如果没看懂,自己稍微理解下,再重新看一遍。
还有就是,为什么环形的可以这样变成一排?
答:其实题目中的环形所能起的作用就是让第$N$个位置和第$1$个位置产生联系,而我们这样已经把每一位和第$1$个位置的联系都搞清楚了,而且在状态转移的过程中把相邻异或为全$1$的非法状态去除掉了,所以答案没错。
另外一点,要注意的是,由前一个位置的状态$1$转移过来的时候,去掉和前一个位置的颜色异或值为全$1$的数字,也就是去掉和第一个位置的数字相等的数字,这儿并没有和前一次$dp[i-1][0]*(2^k-2)$的计算重复,原因是:前一个位置的状态不同,一个是$0$,一个是$1$。
四、代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define MAXN 1000010
;
LL dp[MAXN][];
LL qpow(LL a, LL x) {
LL res = ;
) {
)res = (res * a) % mod;
a = (a * a) % mod;
}
return res;
}
int main() {
int T, n, k;
scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &k);
LL p2 = qpow(, k);
dp[][] = p2;
dp[][] = dp[][] = ;
; i <= n; ++i) {
dp[i][] = (dp[i - ][] + dp[i - ][]) % mod;
dp[i][] = (dp[i - ][] + dp[i - ][]) % mod;
dp[i][] = (((dp[i - ][] + dp[i - ][]) % mod) * (p2 - + mod) % mod + dp[i - ][] * (p2 - ) % mod) % mod;
}
LL ans = (dp[n][] + dp[n][]) % mod;
printf("%lld\n", ans);
}
;
}
2018ICPC网络赛(徐州站)A题题解的更多相关文章
- 2018ICPC网络赛(焦作站)E题题解
一.题目链接 二.题意 给定一棵树,有四种操作: $1\ u\ v\ x$:把节点$u$到$v$路径上的所有点的权值乘以$x$: $2\ u\ v\ x$:把节点$u$到$v$路径上的所有点的权值加上 ...
- 2018ICPC网络赛(焦作站)K题题解
一.题目链接 https://nanti.jisuanke.com/t/31720 二.题意 给$N$种船只,第$i$种船的载重量是$V_i$,数量是$2^{C_i}-1$.接下来有$Q$次询问,每次 ...
- 2013 ACM-ICPC亚洲区域赛南京站C题 题解 轮廓线DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4804 题目大意 给你一个 \(n \times m\) 的矩形区域.你需要用 \(1 \times 1 ...
- 2019~2020icpc亚洲区域赛徐州站H. Yuuki and a problem
2019~2020icpc亚洲区域赛徐州站H. Yuuki and a problem 题意: 给定一个长度为\(n\)的序列,有两种操作: 1:单点修改. 2:查询区间\([L,R]\)范围内所有子 ...
- 2019CCPC网络预选赛 八道签到题题解
目录 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 6702 & 6703 array 6704 K-th occurrence 6705 path 6706 huntian o ...
- HDU 4730 We Love MOE Girls (2013成都网络赛,签到水题)
We Love MOE Girls Time Limit: 1000/500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- SCNU省选校赛第二场B题题解
今晚的校赛又告一段落啦,终于"开斋"了! AC了两题,还算是满意的,英语还是硬伤. 来看题目吧! B. Array time limit per test 2 seconds me ...
- Building Fire Stations 39届亚洲赛牡丹江站B题
题意: 给你一棵树,让你再里面选取两个点作为**点,然后所有点的权值是到这两个点中最近的那个的距离,最后问距离中最长的最短是多少,输出距离还有那两个点(spj特判). 思路: 现场 ...
- hdu 5038 (2014北京网络赛G 排序水题)
题意:有n个数字,带入10000 - (100 - ai) ^ 2公式得到n个数,输出n个数中频率最大的数,如果有并列就按值从小到大都输出输出,如果频率相同的数字是全部的n个数,就输出Bad....题 ...
随机推荐
- Android开发入门要点记录:四大组件
cocos2dx跨平台开发中需要了解android开发,昨天快速的浏览了一本Android开发入门教程,因为之前也似懂非懂的写过Activity,Intent,XML文件,还有里面许多控件甚至编程思想 ...
- Appium 并发测试基于unitest
前言: 在回归测试阶段,UI测试,兼容测试是测试的必要步骤.UI自动化的本身是比较冗余的测试,但是换个角度思考,UI自动化同时连接多台设备,那么在回归测试时,在同一个脚本下产生的测试结果是非常有价值的 ...
- HDU 3046
http://acm.hdu.edu.cn/showproblem.php?pid=3046 典型的最小割模型 #include <iostream> #include <cstdi ...
- spark 与 Hadoop 融合后 Neither spark.yarn.jars nor spark.yarn.archive is set
参考文献: http://blog.csdn.net/lxhandlbb/article/details/54410644 每次提交Spark任务到yarn的时候,总会出现uploading reso ...
- python编码问题 decode与encode
参考: http://www.jb51.net/article/17560.htm 如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCI ...
- Android Studio安装、配置教程全 - 安卓开发环境的配置手册
Android Studio的安装.配置 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 一 Downloa ...
- BZOJ 1845三角形面积并
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1845 给定100个三角形,求三角形面积并. 戴神模板太可怕.直接调用函数秒掉.思路 ...
- 破解UltraEdit(Ver20.00.0.1040),无限试用
因为是第一次破解较大型的商业软件,所以有必要记录一下,另外UE的价格也实在太贵了... 第零步:准备 准备好破解常用软件.我常用的工具有IDA(用于静态分析).Ollydbg(动态调试).PEiD(用 ...
- 树莓派做下载机+Web服务器(Aria2下载+yaaw做UI+nginx)
今天收到了小派,UK产的绿板子,还配了个透明盒子,装在里面闪亮亮的很好看,而且只有卡片大小,寻思着用它做什么好呢?想来想去,看到人家拿小派作家庭媒体中心,还有人拿它当下载机,于是就萌生了一个家庭媒体中 ...
- nnlog模块使用
安利一个好用的写日志模块,python自带的logging模块理解起来比较费劲,直接pip install nnlog即可 使用例子如下代码: 1 2 3 4 5 6 7 8 9 10 11 12 ...