题解:

https://files.cnblogs.com/files/clrs97/title-solution.pdf

Code:

#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=2100,M=205,BUF=15000000;
const ll inf=1LL<<60;
unsigned int SA,SB,SC;
int Case,p,A,B,n,K,m,i,j,x,y,lim,d[N];
ll sum[N],w[N][M],f[N][M];
char Buf[BUF],*buf=Buf;
inline void read(int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}
inline void read(unsigned int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;}
inline unsigned int rng61(){
SA^=SA<<16;
SA^=SA>>5;
SA^=SA<<1;
unsigned int t=SA;
SA=SB;
SB=SC;
SC^=t^SA;
return SC;
}
inline void input(int x,int A,int B){
while((x>>j)>lim)j+=K;
x>>=j;
A%=m;
sum[x]+=B;
w[x][0]+=(m-A)*B;
w[x][A]-=m*B;
}
inline void up(ll&a,ll b){a>b?(a=b):0;}
void dfs(int x){
int l=x<<1,r=x<<1|1,i,j;
if(l>lim){
for(i=0;i<m;i++)f[x][i]=w[x][i];
return;
}
for(i=0;i<m;i++)f[x][i]=inf;
dfs(l);
if(r>lim||d[l]!=d[r]){
for(i=0;i<m;i++)for(j=0;j<m;j++)up(f[x][(i+j)%m],w[x][i]+f[l][j]);
return;
}
dfs(r);
for(i=0;i<m;i++)for(j=0;j<m;j++)up(f[x][(i+j)%m],w[x][i]+f[l][j]+f[r][j]);
}
void solve(){
read(n),read(K),read(m),read(p),read(SA),read(SB),read(SC),read(A),read(B);
K++;
lim=min((1<<K)-1,n);
for(i=1;i<=lim;i++){
sum[i]=0;
for(j=0;j<m;j++)w[i][j]=0;
}
for(i=1,j=0;i<=p;i++){
read(x),read(y);
input(i,x,y);
}
for(i=p+1;i<=n;i++){
x=rng61()%A+1;
y=rng61()%B+1;
input(i,x,y);
}
for(i=1;i<=lim;i++){
for(j=1;j<m;j++)w[i][j]+=w[i][j-1];
for(j=1;j<m;j++)w[i][j]+=sum[i]*j;
}
for(i=lim;i;i--){
d[i]=0;
if((i<<1)<=lim)d[i]=d[i<<1];
d[i]++;
}
dfs(1);
printf("%lld\n",f[1][0]);
}
int main(){
fread(Buf,1,BUF,stdin);
read(Case);
while(Case--)solve();
return 0;
}

  

SDOI2018:荣誉称号的更多相关文章

  1. [loj#2566][BZOJ5333] [Sdoi2018]荣誉称号 树形dp

    #2566. 「SDOI2018」荣誉称号   休闲游戏玩家小 Q 不仅在算法竞赛方面取得了优异的成绩,还在一款收集钻石的游戏中排名很高. 这款游戏一共有 n 种不同类别的钻石,编号依次为 1 到 n ...

  2. [SDOI2018]荣誉称号

    题解: 并不需要什么算法 首先我们随便画一画就会发现 能画出一颗满二叉树 然后要满足每个点从上往下的路径和都相同(%m意义下) 一个点上可能对应了多个点 然后这样我们可以暴力dp $2^k*m^2+n ...

  3. BZOJ5333 [Sdoi2018]荣誉称号 【差分 + 树形dp】

    题目链接 BZOJ5333 题解 看到式子,立即想到二叉树上一个点及其\(k\)个父亲权值和[如果有的话]模\(m\)意义下为\(0\) 考虑如何满足条件 我们假设\(1\)号为第\(0\)层 那么我 ...

  4. BZOJ5333:[SDOI2018]荣誉称号——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5333 https://www.luogu.org/problemnew/show/P4620 题意 ...

  5. bzoj5333: [Sdoi2018]荣誉称号

    请不要去改题目给的输入,不然你会wa穿... 这么故弄玄虚的题目,肯定要先转换问题 看到这个不断的除2想起别人家的线段树的写法...x的两个孩子是x<<1和x<<1|1 然后问 ...

  6. SDOI2018

    SD的题有点反人类啊... d1t1[SDOI2018]物理实验 感觉比较好想但不太好写,写了一半弃了 d1t2[SDOI2018]战略游戏 建出圆方树,每次建虚树,答案就是虚树上的原点个数减去询问的 ...

  7. [SDOI2018] 旧试题

    推狮子的部分 \[ \sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^C\sigma(ijk) =\sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^C\sum_ ...

  8. 【BZOJ5332】[SDOI2018]旧试题(数论,三元环计数)

    [BZOJ5332][SDOI2018]旧试题(数论,三元环计数) 题面 BZOJ 洛谷 题解 如果只有一个\(\sum\),那么我们可以枚举每个答案的出现次数. 首先约数个数这个东西很不爽,就搞一搞 ...

  9. [SDOI2018]战略游戏 圆方树,树链剖分

    [SDOI2018]战略游戏 这题是道路相遇(题解)的升级版,询问的两个点变成了\(S\)个点. LG传送门 还是先建出圆方树,考虑对于询问的\(S\)个点,答案就是圆方树上能包含这些点的最小连通块中 ...

随机推荐

  1. linux basic ------ dd 和 cp 的区别

    问:看了一些关于dd和cp的命令,但是我始终无法明白dd和cp之间有什么不同?不是都可以看成是备份的作用么?还有什么区别呢?答:1.dd是对块进行操作的,cp是对文件操作的. 2.比如有两块硬盘,要将 ...

  2. js值类型转换(boolean/String/number),js运算符,if条件,循环结构,函数,三种弹出框

    js值类型转换 number | string | boolean boolean类型转换 num = 0; var b1 = Boolean(num); console.log(b1) 转化为数字类 ...

  3. django - 总结 - ModelForm

    gender = forms.ChoiceField(choices=((1, '男'), (2, '女'), (3, '其他'))) # 与sql没关系 publish = forms.Choice ...

  4. django - 总结 - CRM - 知识点

    1.扩展auth_user from django.contrib.auth.models import User,AbstractUser class UserInfo(AbstractUser): ...

  5. Node.js实战项目学习系列(1) 初识Node.js

    前言 一直想好好学习node.js都是半途而废的状态,这次沉下心来,想好好的学习下node.js.打算写一个系列的文章大概10几篇文章,会一直以实际案例作为贯穿的学习. 什么是node Node.js ...

  6. [物理学与PDEs]第5章第2节 变形的描述, 应变张量 2.3 位移梯度张量与无穷小应变张量

    1.  位移向量 $$\bex {\bf u}={\bf y}-{\bf x}. \eex$$ 2.  位移梯度张量 $$\bex \n_x{\bf u}={\bf F}-{\bf I}. \eex$ ...

  7. centos添加开放端口

    Centos 开放 80 端口 firewall-cmd --zone=public --add-port=80/tcp --permanent 重启防火墙 firewall-cmd --reload ...

  8. javascript基础 之 代码规范

    1,变量名 1,变量名推荐使用小驼峰写法:类似于:firstName 2,全局变量和常量建议用大写:PI 3,支持下划线 2,缩进 1,一般使用4个空格当作缩进,tab建议少用 2,运算符左右和左花括 ...

  9. codeblocks添加编译选项

    -std=c++0x

  10. 易度文档管理系统--http://www.everydo.com/

    易度文档管理系统--http://www.everydo.com/ 公司工程技术部门需要,暂收藏.