因为时间关系这把没设计题面,而且居然还出了锅……T_T

  原题是leetcode WeeklyContest52 的T1(懒得去找url了

  随便搞,但是无解输-1

数字统计

原题PE603

  记前n个素数组成的字符串为S

  一个数字可以分成三部分,中间一段恰好为S复制某次后的结果,前面一段S的后缀,后面一段S的前缀。这3个部分分开统计。

  对于每个部分,我们可以很容易写出一份暴力,然后用自然数k次前缀和的公式优化一波就可以了。

#include<ctime>
#include<cassert>
#include<cstdio>
#include<algorithm>
#define MN 2000001
#define int long long
#define ju(x) assert(1||(x)>=0&&x<MOD)
using namespace std; const int MOD=1e9+;
int p[MN],sum=,num=,K,mmh,s[MN],n,pre[MN],suf[MN];
bool bo[MN];
inline void M(int &x){while(x>=MOD)x-=MOD;while(x<)x+=MOD;}
inline int mi(long long x,long long y){
int mmh=;
while (y){
if (y&) mmh=1LL*mmh*x%MOD;
x=1LL*x*x%MOD;y>>=;
}
return mmh;
}
signed main(){
for (int i=;i<MN;i++){
if (!bo[i]) p[++num]=i;
for (int j=;j<=num&&i*p[j]<MN;j++)
if (bo[i*p[j]]=,i%p[j]==) break;
}
num=;K=1000000000000ll;
//freopen("data/count1.in","r",stdin);
//freopen("data/count1.out","w",stdout);
//num=10000;K=1000000000000ll;
//num=23;K=233;
scanf("%lld%lld",&num,&K);
mmh=n=;
for (int i=num;i;i--)
for (int j=p[i];j;j/=) s[n++]=j%;
for (int i=;i<n/;i++) swap(s[i],s[n--i]);
for (int i=;i<n;i++) M(pre[i]=pre[i-]*%MOD+s[i]);
for (int i=n-,k=;i>=;i--,k=1LL*k*%MOD) M(suf[i]=1LL*s[i]%MOD*k%MOD+suf[i+]); for (int i=,j=;i<n;i++)
j=(1LL*j%MOD*%MOD+1LL*s[i]%MOD*(i+)%MOD)%MOD,M(mmh+=j);
mmh=1LL*K%MOD*mmh%MOD;
for (int i=;i<n;i++) sum=(1LL*sum*+s[i])%MOD;
int MMH=1LL*K%MOD*((K-)%MOD)%MOD*mi(,MOD-)%MOD*%MOD,_MMH=,a=mi(,MOD-);
MMH=MOD-MMH;
ju(MMH);ju(_MMH); //for (int i=0;i<K;i++) _MMH=(1LL*i%MOD*mi(a,i*n)+_MMH)%MOD;
int b=mi(a,n);
M(_MMH=((1LL*(K-)%MOD*mi(b,K)+)%MOD*mi(b-,MOD-)%MOD-(1LL*mi(b,K)-)%MOD*mi(b-,MOD-)%MOD*mi(b-,MOD-)%MOD)%MOD);
ju(MMH);ju(_MMH); _MMH=1LL*_MMH%MOD*mi(,K*n-n+)%MOD;
M(mmh+=1LL*(MMH+_MMH)%MOD*n%MOD*sum%MOD*mi(,MOD-)%MOD);
ju(MMH);ju(_MMH);
for (int i=;i<n;i++){
int MMH=1LL*(mi(,K*n)-)%MOD*mi(mi(,n)-,MOD-)%MOD;
ju(MMH); MMH=MMH*%MOD;
M(MMH-=K*%MOD);
ju(MMH);
M(mmh+=suf[i]%MOD*mi(,MOD-)%MOD*MMH%MOD);
ju(mmh);
} for (int i=;i<n;i++){
int MMH=1LL*K%MOD*((K-)%MOD)%MOD*mi(,MOD-)%MOD;
ju(MMH);
M(mmh+=1LL*pre[i]%MOD*n%MOD*MMH%MOD);
ju(mmh);
}
printf("%lld\n",mmh);
return ; mmh=n=;
for (int k=;k<=K;k++)
for (int i=num;i;i--)
for (int j=p[i];j;j/=) s[n++]=j%;
for (int i=;i<n/;i++) swap(s[i],s[n--i]);
for (int i=,j=;i<n;i++)
j=(1LL*j%MOD*%MOD+1LL*s[i]%MOD*(i+))%MOD,M(mmh+=j);
printf("%lld\n",mmh);
return ; mmh=n=;
for (int k=;k<=K;k++)
for (int i=num;i;i--)
for (int j=p[i];j;j/=) s[n++]=j%;
for (int i=n-;i>=;i--)
for (int j=i,k=;j>=;j--)
k=(1LL*k*+s[j])%MOD,M(mmh+=k);
printf("%d\n",mmh);
}

飞翔

原题 Codility Chromium 2017

  首先把数字从大到小排个序,然后从1到n枚举以每棵树为起点的序列数,这样就每次只有一棵树从在右边的状态变成在左边的状态。

  问题变成,一列格子,一些是黑色的,一些是白色的,你需要从左往右走,每次可以走到当前格子右边的任意一个点,相邻两次踩到的格子必须颜色不同。这个问题显然可以直接递推。考虑到要进行修改操作,我们可以用线段树维护矩阵乘法实现。

  出题人写了3次觉得这玩意贼好写啊(不到2k的线段树

#include<cstdio>
#include<algorithm>
#define lp p<<1
#define rp (p<<1)|1
#define MN 400000
using namespace std; int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while(read_ca<''||read_ca>'') read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
int n,m,a[MN],b[MN],t[MN*][][],C[][],Mavis[][],mmh=;
const int MOD=1e9+;
inline void M(int &x){while(x>=MOD)x-=MOD;while(x<)x+=MOD;}
bool cmp(int x,int y){return a[x]>a[y];}
void cc(int a[][],int b[][],int c[][]){
int i,j,k;
for (i=;i<;i++)
for (j=;j<;j++)
for (C[i][j]=,k=;k<;k++) C[i][j]=(1LL*a[i][k]*b[k][j]+C[i][j])%MOD; for (i=;i<;i++)
for (j=;j<;j++) c[i][j]=C[i][j];
}
void build(int p,int l,int r){
if (l==r){
t[p][][]=t[p][][]=t[p][][]=;t[p][][]=;
return;
}
int mid=l+r>>;
build(lp,l,mid);build(rp,mid+,r);
cc(t[lp],t[rp],t[p]);
}
void ask(int p,int l,int r,int k){
if (k<l) return;
if (r<=k){
cc(Mavis,t[p],Mavis);
return;
}
int mid=l+r>>;
ask(lp,l,mid,k);ask(rp,mid+,r,k);
}
void cg(int p,int l,int r,int k){
if (l==r){
t[p][][]=t[p][][]=t[p][][]=;t[p][][]=;
return;
}
int mid=l+r>>;
if (k<=mid) cg(lp,l,mid,k);else cg(rp,mid+,r,k);
cc(t[lp],t[rp],t[p]);
}
int main(){
n=read();
for (int i=;i<=n;i++) a[i]=read(),b[i]=i;
sort(b+,b++n,cmp);
for (int i=;i<=n;i++) a[b[i]]=i; build(,,n);
for (int i=;i<=n;i++){
Mavis[][]=Mavis[][]=;Mavis[][]=Mavis[][]=;
if (a[i]-) ask(,,n,a[i]-);
M(mmh+=Mavis[][]);M(mmh+=Mavis[][]);
cg(,,n,a[i]);
}
M(mmh-=n);
printf("%d\n",mmh);
}

城乡联谊胡策会糊厕R3的更多相关文章

  1. 弱省胡策 Magic

    弱省胡策 Magic 求\(n\)个点\(n\)的条边的简单联通图的个数. 毒瘤,还要写高精. 我们枚举环的大小\(k\),\(\displaystyle ans=\sum_{k=3}^nC_n^k ...

  2. 【弱省胡策】Round #5 Count

    [弱省胡策]Round #5 Count 太神仙了. \(DP\)做法 设\(f_{n,m,d,k}\)表示\(n*m\)的矩阵,填入第\(k\)个颜色,并且第\(k\)个颜色最少的一列上有\(d\) ...

  3. 【ContestHunter】【弱省胡策】【Round0】(A)&【Round1】(B)

    DP+容斥原理or补集转化?/KD-Tree 唔……突然发现最早打的两场(打的最烂的两场)没有写记录……(太烂所以不忍记录了吗... 还是把搞出来了的两道题记录一下吧= =勉强算弥补一下缺憾…… Ro ...

  4. luoguP3769 [CH弱省胡策R2]TATT

    luoguP3769 [CH弱省胡策R2]TATT PS:做这题前先切掉 P4148简单题,对于本人这样的juruo更助于理解,当然dalao就当练练手吧 题目大意: 现在有n个四维空间中的点,请求出 ...

  5. 【ContestHunter】【弱省胡策】【Round3】(C)

    容斥原理+Fib Orz HE的神犇们 蒟蒻只能改出来第三题……实在太弱 官方题解:http://pan.baidu.com/s/1o6MdtQq fib的神奇性质……还有解密a[i]的过程……这里就 ...

  6. 【ContestHunter】【弱省胡策】【Round2】

    官方题解:http://wyfcyx.is-programmer.com/posts/95490.html A 目前只会30分的暴力……DP好像很神的样子0.0(听说可以多次随机强行算? //Roun ...

  7. 【弱省胡策】Round #5 Construct 解题报告

    这个题是传说中的 Hack 狂魔 qmqmqm 出的构造题.当然要神. 这个题的本质实际上就是构造一个图,然后使得任意两点间都有长度为 $k$ 的路径相连,然后对于任意的 $i < k$,都存在 ...

  8. 【弱省胡策】Round #5 Handle 解题报告

    这个题是我出的 sb 题. 首先,我们可以得到: $$A_i = \sum_{j=i}^{n}{j\choose i}(-1)^{i+j}B_j$$ 我们先假设是对的,然后我们把这个关系带进来,有: ...

  9. 【弱省胡策】Round #6 String 解题报告

    感觉这个题好神啊. 首先我们只管 $a = b$ 的情况,那么我们自然就可以把这个串对 $a$ 取模,然后用 KMP 求出能弄出几个其他的 B 串. 具体就是把串先倍长,然后倒过来,然后求 $Next ...

随机推荐

  1. windows server 2008 R2服务器安装IIS并添加网站

    一.连接远程计算机 1.因为我的电脑是win7系统,故这里以win7为例,其他windows系统大同小异,首先点开开始菜单栏,在windows附件下找到远程桌面连接 或者采用通用的方法,利用快捷键wi ...

  2. nova创建虚拟机源码系列分析之二 wsgi模型

    openstack nova启动时首先通过命令行或者dashborad填写创建信息,然后通过restful api的方式调用openstack服务去创建虚拟机.数据信息从客户端到达openstack服 ...

  3. Anti-pattern/反模式

      常见的与"直觉"相背离的anti-pattern产生的实际原因是没有深入.全面地考虑问题,即只关注到自己关心的方面,忽略了其他重要的.起相反作用的因素. 所以这个"直 ...

  4. pc端常用导航

    应为经常要写网站,导航部分基本一样,没必要每次都写一遍,下次直接来复制: HTML: <nav> <div class="clearfix container"& ...

  5. mysql数据库出现2003-Can't connect to MySQL server on 'localhost' (10061)的解决方法

    1.右键点击我的电脑,找到管理! 2.找到服务和应用程序: 3.打开找到服务,打开: 4.在服务里找到MySQL,改成启动:

  6. Python 项目实践三(Web应用程序)第四篇

    接着上节继续学习,本章将建立用户账户 Web应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方.在本章中,你将创建一些表单,让用户能够添加主题和条目,以及编辑既有的条目.你还将学习 ...

  7. NOI 2005维护数列

    题目描述 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文件中的空格) 输入输出格式 输入格式: 输入文件的第 1 行包含两个数 N 和 M, ...

  8. bash脚本之数组学习

    在bash中可使用索引数组和关联数组,bash在4.0版本之后才添加了对关联数组的支持 一.索引数组 1.定义索引数组 # 方式1 array_value=(1 2 3 4 5 6)或者array_v ...

  9. 吓尿了,mac下bash出了问题

    由于个人的脑残行为,使用homebrew安装bash后,使用chsh命令将其改成brew安装的特定版本的bash,结果上次brew更新bash之后,就彻底用不了shell了... 无奈只能添加新的管理 ...

  10. Java Web高级编程(一)

    Servlet 一.创建Servlet类 在Java EE中,Servlet用来接收和响应终端用户的请求.Servlet是所有Web应用程序的核心类,是唯一既可以直接处理和响应用户请求,也可以将处理工 ...