[POI2016]Nim z utrudnieniem
Description
Input
Output
Sample Input
1 3 4 1 2
Sample Output
$f[i][j][k]=f[i-1][j-1][k~xor~a[i]]+f[i-1][j][k]$
复杂度$O(n*maxa*d)$
但可以发现$a[i]$和小于$a[i]$的数异或和不会超过$2*a[i]$
所以按$a$排序,限制$k$的枚举上界
此题卡空间
先把第一维去掉,然后一个一个试数组开多大,因为开到$10*2000000$肯定会超
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<cmath>
- using namespace std;
- int Mod=1e9+;
- int f[][],g[],n,d,a[],lim,s;
- int main()
- {int i,j,k;
- scanf("%d%d",&n,&d);
- for (i=;i<=n;i++)
- {
- scanf("%d",&a[i]);
- s^=a[i];
- }
- sort(a+,a+n+);
- f[][]=;
- for (i=;i<=n;i++)
- {
- lim=;
- while (lim<=a[i]) lim*=;
- for (j=;j<lim;j++)
- {
- g[j]=f[][j]+f[d-][j^a[i]];
- if (g[j]>=Mod) g[j]-=Mod;
- }
- for (j=d-;j;j--)
- {
- for (k=;k<lim;k++)
- {
- f[j][k]=f[j-][k^a[i]]+f[j][k];
- if (f[j][k]>=Mod) f[j][k]-=Mod;
- }
- }
- for (j=;j<lim;j++)
- {
- f[][j]=g[j];
- }
- }
- if (n%d==) f[][s]--;
- if (f[][s]<) f[][s]+=Mod;
- printf("%d\n",f[][s]);
- }
[POI2016]Nim z utrudnieniem的更多相关文章
- bzoj 4347 [POI2016]Nim z utrudnieniem DP
4347: [POI2016]Nim z utrudnieniem Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 733 Solved: 281[Su ...
- BZOJ4347 : [POI2016]Nim z utrudnieniem
将石子从小到大排序,然后DP. 设$f[i][j][k]$表示考虑了前$i$堆的石子,当前扔掉的堆数模$d$为$j$,没有扔掉的石子的异或和为$k$的方案数. 因为石子排过序,所以转移的复杂度为$O( ...
- 【bzoj4347】[POI2016]Nim z utrudnieniem dp
题解: 感觉我简直是个傻逼 把题目数据范围看错了.. 然后觉得这题非常的不可做 sigmaai <1e7.... 这题的dp是非常简单的,注意到d很小 f[i][j][k]表示前i个,%d为j, ...
- 解题:POI 2016 Nim z utrudnieniem
题面 出现了,神仙题! 了解一点博弈论的话可以很容易转化题面:问$B$有多少种取(diu)石子的方式使得取后剩余石子异或值为零且取出的石子堆数是$d$的倍数 首先有个暴力做法:$dp[i][j][k] ...
- BZOJ4347 POI2016Nim z utrudnieniem(博弈+动态规划)
由nim游戏的结论,显然等价于去掉一些数使剩下的数异或和为0. 暴力的dp比较显然,设f[i][j][k]为前i堆移走j堆(模意义下)后异或和为k的方案数.注意到总石子数量不超过1e7,按ai从小到大 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【Python】使用torrentParser1.03对多文件torrent的分析结果
Your environment has been set up for using Node.js 8.5.0 (x64) and npm. C:\Users\horn1>cd C:\User ...
- Nim语言的模块化编程
前言 Nim支持把一大段程序分成若干个模块 一个模块就是一个源代码文件 每个模块都拥有它自己的名称空间 模块化可以起到封装(信息隐藏)和分步编译的作用 一个模块可以通过import语句获得另一个模块的 ...
- Nim教程【十二】
排除指定符号 一般情况下使用import语句,会把一个模块内的符号都导入进来 如果你像排除特定的符号(不想让某些符号被导入进来) 可以使用except子句 就像下面这样 import mymodule ...
随机推荐
- JavaScript之隐式类型转换
布尔操作符(!.&&.||) 当使用 条件判断语句(if...else) 以及 布尔操作符(!.&&.||) 时,会调用Boolean()进行隐式类型转换 转换为fal ...
- iOS开发-FFmpeg深入分析
FFmpeg是相当强大的多媒体编解码框架,在深入分析其源代码之前必须要有基本的多媒体基础知识,否则其源代码会非常晦涩难懂.本文将从介绍一些基本的多媒体只是,主要是为研读ffmpeg源代码做准备,比如一 ...
- 源端控制的OpenFlow数据面
OpenFlow 交换机一般采用 TCAM 存储和查找流表,从而带来了扩展性.成本和能耗的问题.TCAM 成本和能耗过高,存储容量有限,一般交换机中的 TCAM 仅能存储几千条流表项,对 OpenFl ...
- NetFPGA Demo ——reference_router_nf1_cml
NetFPGA Demo --reference_router_nf1_cml 前言 本博文主要介绍了reference_router_nf1_cml该demo的一路运行,以及一路上艰难跑通遇到的坑. ...
- 一句话了解JAVA与大数据之间的关系
大数据无疑是目前IT领域的最受关注的热词之一.几乎凡事都要挂上点大数据,否则就显得你OUT了.如果再找一个可以跟大数据并驾齐驱的IT热词,JAVA无疑是跟大数据并驾齐驱的一个词语.很多人在提到大数据的 ...
- Python 简单聊天室
#coding=utf-8 from socket import * from threading import Thread import time udpSocket = socket(AF_IN ...
- linux系统命令学习系列-用户切换命令su,sudo
先复习一下上节内容: 用户组添加groupadd 用户组修改groupmod 用户组删除groupdel 作业创建一个id为501的组group1,然后改成group2, 同时id变为502,最后删除 ...
- linux下面的打包压缩命令
tar命令 tar [-cxtzjvfpPN] 文件与目录 ....linux下面压缩之前要把一堆文件打个包再压缩,即使只有一个文件也需要打个包.例子:tar czvf 1.tar.gz hello. ...
- LeetCode & Q283-Move Zeroes-Easy
Array Two Pointers Description: Given an array nums, write a function to move all 0's to the end of ...
- javaScript识别网址文本并转为链接文本
最近项目有个需求:用户之间发送消息时,如果发送者输入的信息中含有网址文本,要在接受者界面中显示网址链接,点击该链接直接跳转到网页.这个功能和 QQ 发送网址文本的效果非常像,可以说是一模一样的. 思路 ...