丢分主要是下面几个方面:

1.T2代码交错了,有个特判没写丢了10分

2.T1线段树加等差数列写错了(其实二维差分就可以,但我当时不会)

3.T3思考再三还是为了10分写上了主席树,还是写错了

总体评价就是和正解没什么联系,暴力也没写满


T1:sequence

题目链接:

http://172.16.0.132/senior/#contest/show/2535/0

题目:

小 F 是一位 Hack 国的居民,他生活在一条长度为 n 的街道上,这个街道上总共有 n 个商店。每个商店里售卖着不同的 Hack 技能包,每个商店本身也会有个便利值。初始时,每个商店的便利值均为 0。每一天,街道上都会有一些商店优化改造。
具体来说,对于每一天,优化改造的商店都是一个连续的区间 l ∼ r,每次优化改造也会有一个优化参数 k。对于所有 l ≤ i ≤ r ,第 i 个商店的便利值会增加
aaarticlea/png;base64,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" alt=" " />。

小 F 想知道,m 天之后,每个商店的便利值分别是多少。由于小 F 并不喜欢高精度,因此你只需要输出便利值对 10^9 + 7 取模的结果。

题解:

考虑一个下标从 0 开始的数列,这个数列的每个数均为 1。 我们对这个数列做$ k$ 阶前缀和,得到的数列第i项的值为$\dbinom{k+i}{k}$。

于是我们发现题目中的这个加法实际上就是对当前的序列的第$k+1$阶差分(考虑到影响0阶前缀和的是1阶差分序列,影响$k$阶前缀和的就是$k+1$阶差分序列),设第$k$阶差分数组为$cha[k]$,那么题目中的这个加法产生的效果就是$cha[k+1][l]++,cha[k+1][r+1]--$

但如果是这样的话还是不行的,我们还需要对$1~k$阶差分序列的第$r+1$项做一些运算,设当前为第i阶差分序列(1<=i<=k),在第r+1位减去$\dbinom{r-l+k-(i-1)}{k-(i-1)}$,即减去当前差分序列的前缀和,为的是消去对后面的影响

可以手推一下样例方便理解

#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll; const int N=5e5+;
const int mo=1e9+;
int n,m;
ll cha[][N],s[][N],ans[N],C[N][];
inline int read(){
char ch=getchar();int s=,f=;
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
return s*f;
}
int main()
{
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
C[][]=;
for (int i=;i<N;i++)
for (int j=;j<;j++)
{
if (!j) C[i][j]=;
else C[i][j]=(C[i-][j-]+C[i-][j])%mo;
}
n=read();m=read();
while (m--)
{
int l=read(),r=read(),k=read();
cha[k+][l]++;cha[k+][r+]--;
for (int i=k;i;i--)
{
cha[i][r+]=(cha[i][r+]+mo-C[k-(i-)+r-l][k-(i-)])%mo;
}
}
for (int i=;i>=;i--)
{
for (int j=;j<=n;j++) s[i][j]=(cha[i+][j]+s[i][j-]+mo)%mo;
for (int j=;j<=n;j++) cha[i][j]=(cha[i][j]+mo+s[i][j]+mo)%mo;
}
for (int i=;i<=n;i++) printf("%lld\n",cha[][i]);
return ;
}

T2:Bomb

题目链接:

http://172.16.0.132/senior/#contest/show/2535/1

题目:

常数国与 Hack 国近年来战火纷飞。
  常数国共有 n 个城市,每两个城市之间均有一条交通线联通。如今常数国遭到 Hack 国的重创,岌岌可危。Hack 国国王小 K 决定轰炸常数国的交通线,对常数国发起最后的攻击。
  面对危难之时,常数国国王决定更换首都。在 Hack 国的轰炸结束之后,常数国的领土将会分成若干个联通块。常数国的首都,将会从联通块大小最大的联通块中,随机选择一个城市,作为首都。
  小 K 得知了常数国的应对方案之后,他想知道,Hack 国有多少种不同的轰炸方案,使得常数首都所在的联通块大小恰好为 k。两种轰炸方案是不同的,当且仅当一条交通线在一种方案中存在,在另一种方案中被轰炸。由于方案数可能很大,你需要输出方案数对 998,244,353 取模的结果。

题意:

询问n个有编号点形成的最大连通块为k的方案数

首先我们要知道这么一个式子,设$f_n$为$n$个有编号节点的连通图的方案数,$f_i=2^{\dbinom{i}{2}}-\sum_{j=1}^{n-1}2^{\dbinom{i-j}{2}}\dbinom{i-1}{j-1} f_j$

现在回到题目,设$p_i$表示i个有标号节点的最大连通块等于k的连通图的个数,$p_n$即为答案;设$q_i$表示i个有标号节点的最大连通块小于等于k的连通图的个数

考虑初始化:$p_0=0,q_0=1$

考虑转移:$\sum_{j=1}^{min(i,k)}$

\begin{equation}
\left\{
\begin{array}{lr}
p_i+=p_{i-j}\times \dbinom{i-1}{j-1} f_j, j<k&\\
p_i+=q_{i-j}\times \dbinom{i-1}{j-1}f_j, j=k&
\\q_i+=q_{i-j}\times \dbinom{i-1}{j-1}f_j&
\end{array}
\right.
\end{equation}

#include<algorithm>
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll; const int N=2e3+;
const int mo=;
int n,k;
ll C[N][N],f[N],p[N],q[N];
ll qpow(ll a,ll b)
{
ll re=;
for (;b;b>>=,a=a*a%mo) if (b&) re=re*a%mo;
return re;
}
int main()
{
freopen("bomb.in","r",stdin);
freopen("bomb.out","w",stdout);
scanf("%d%d",&n,&k);
C[][]=;
for (int i=;i<=n;i++)
for (int j=;j<=i;j++)
{
if (!j) C[i][j]=;
else C[i][j]=(C[i-][j-]+C[i-][j])%mo;
}
f[]=;f[]=;
for (int i=;i<=n;i++)
{
ll re=qpow(,C[i][]);
for (int j=;j<i;j++) re=(re+mo-qpow(,C[i-j][])*C[i-][j-]%mo*f[j]%mo)%mo;
f[i]=re;
}
q[]=;
for (int i=;i<=n;i++)
for (int j=;j<=min(i,k);j++)
{
if (j<k)
{
p[i]=(p[i]+p[i-j]*C[i-][j-]%mo*f[j]%mo)%mo;
}
if (j==k)
{
p[i]=(p[i]+q[i-j]*C[i-][j-]%mo*f[j]%mo)%mo;
}
q[i]=(q[i]+q[i-j]*C[i-][j-]%mo*f[j]%mo)%mo;
}
printf("%lld\n",p[n]);
return ;
}

T3:queue

题目链接:

http://172.16.0.132/senior/#contest/show/2535/2

题目:

题解:

考虑分块,块内元素我们用链表相连,维护每个快内每个元素出现的个数。显然对于询问我们可以整块询问,边界暴力

考虑轮转操作,我们把r所在元素从r所在连通块删去,然后加入到l之前的位置。设l所在连通块为k1,r所在连通块为k2,让k1到k2-1每个连通块都把最后一个元素丢给后面一个连通块,这样我们就保证了连通块的大小不变了

时间复杂度显然是带根号的

deque实现链表方便的多

#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
#include<deque>
#include<cmath>
using namespace std; const int N=1e5+;
int n,m;
int qu[][N],belong[N],st[N],ed[N],a[N];
deque <int> bl[N];
inline int read(){
char ch=getchar();int s=,f=;
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
return s*f;
}
int main(){
freopen("queue.in","r",stdin);
freopen("queue.out","w",stdout);
n=read();m=read();
if (!n&&!m) return ;
for (int i=;i<=n;i++) a[i]=read();
int blo=sqrt(n);
for (int i=;i<=n;i++) belong[i]=(i-)/blo+;
for (int i=;i<=n;i++) bl[belong[i]].push_back(a[i]),qu[belong[i]][a[i]]++;
for (int i=;i<=(n-)/blo+;i++)
{
st[i]=(i-)*blo+;ed[i]=min(i*blo,n);
}
while (m--)
{
int opt=read();
if (opt==)
{
int l=read(),r=read(),k1=belong[l],k2=belong[r];
int k=bl[k2][r-st[k2]];
bl[k2].erase(bl[k2].begin()+r-st[k2]);
qu[k2][k]--;
bl[k1].insert(bl[k1].begin()+l-st[k1],k);
qu[k1][k]++;
if (k1==k2) continue;
for (int i=k1;i<k2;i++)
{
k=bl[i].back();
bl[i].erase(bl[i].end()-);
qu[i][k]--;
bl[i+].push_front(k);
qu[i+][k]++;
}
}
if (opt==)
{
int l=read(),r=read(),k=read(),k1=belong[l],k2=belong[r];
int re=;
if (k1==k2)
{
for (int i=l-st[k1];i<=r-st[k1];i++) if (bl[k1][i]==k) ++re;
continue;
}
for (int i=l-st[k1];i<=ed[k1]-st[k1];i++)
{
if (bl[k1][i]==k) ++re;
}
for (int i=;i<=r-st[k2];i++) if (bl[k2][i]==k) ++re;
if (k1+<=k2-)
{
for (int i=k1+;i<k2;i++) re+=qu[i][k];
}
printf("%d\n",re);
}
}
return ;
}

[jzoj NOIP2018模拟10.23]的更多相关文章

  1. [jzoj NOIP2018模拟10.29]

    OI生涯的最高分,来了纪中这么多天,在经历了这么多场“NOIP难度”的模拟赛之后,终于看到了真正的NOIP 今天考场上效率很高,很快码完了全部的题目,留下了足够的时间对拍和...发呆.不得不说看着电脑 ...

  2. [JZOJ NOIP2018模拟10.21]

    考试之前我刚刚领略到了特判的重要性,没想到T2的两个子任务还是写挂了,丢了20分 考试的感觉不行,一路打的都是暴力,正解的思路想到一半就断了推不下去 T1:逛公园 题目链接: https://jzoj ...

  3. [JZOJ NOIP2018模拟10.20 B组]

    T1:原根(math) 题目链接: http://172.16.0.132/senior/#contest/show/2532/0 题目: 题解: 一个数m原根的个数是$\phi{(\phi{(m)} ...

  4. [JZOJ NOIP2018模拟10.20 A组]

    由于T3数据出锅,还不清楚自己的分数...估分150,前100已经拿到了,T3的50没拍过(写的就是暴力怎么拍),感觉很不稳 考试的时候就是特别的困,大概是因为早上在房间里腐败...腐败完了才睡觉 T ...

  5. [JZOJ NOIP2018模拟10.19]

    T1写炸了今天,期望70却落了个20...连链上的都没有写对 T3什么什么线段树分治套AC自动机,表示我完全自闭了,幸好考场上没有杠T3 总体比赛还是比较舒服,暴力分给的蛮足的,不像昨天那样 T1:林 ...

  6. [jzoj 5926] [NOIP2018模拟10.25] naive 的图 解题报告(kruskal重构树+二维数点)

    题目链接: https://jzoj.net/senior/#main/show/5926 题目: 题解: 显然最小的最大路径在最小生成树上(最小生成树=最小瓶颈生成树) 于是我们建出kruskal重 ...

  7. [JZOJ 5893] [NOIP2018模拟10.4] 括号序列 解题报告 (Hash+栈+map)

    题目链接: https://jzoj.net/senior/#main/show/5893 题目: 题解: 考虑暴力怎么做,我们枚举左端点,维护一个栈,依次加入元素,与栈顶元素和栈内第二个元素相同时弹 ...

  8. [JZOJ 5912] [NOIP2018模拟10.18] VanUSee 解题报告 (KMP+博弈)

    题目链接: https://jzoj.net/senior/#contest/show/2530/2 题目: 众所周知,cqf童鞋对哲学有着深入的理解和认识,并常常将哲学思想应用在实际生活中,例如锻炼 ...

  9. [JZOJ 5910] [NOIP2018模拟10.18] DuLiu 解题报告 (并查集+思维)

    题目链接: https://jzoj.net/senior/#contest/show/2530/0 题目: LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃 ...

随机推荐

  1. buf.write()

    buf.write(string[, offset[, length]][, encoding]) string {String} 需要被写入到 Buffer 的字节 offset {Number} ...

  2. LearnPython笔记:ex48 代码

    赶紧写上 ,一定有人着急要看,啊哈哈哈哈,嘻嘻 哈哈 不枉我起了个大早 利用什么碎片时间啊,真正能深入学习的,是需要大段大段不被打断的时间 1. 完全实现了如下几种输入数据: 2. 遗留:最后一个el ...

  3. js之定时器操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Latex Notes

    latex Table of Contents 1. Presentation/Slides with Beamer 2. Drawing in LaTex With TikZ 3. Tracked ...

  5. Tree(树的还原以及树的dfs遍历)

    紫书:P155 uva  548   You are to determine the value of the leaf node in a given binary tree that is th ...

  6. 3.6.5 空串与Null串

        空串""是长度为0的字符串.可以调用以下代码检查一个字符串是否为空:                 String s = "greeting";    ...

  7. flask——CSRFToken保护

    根据 csrf_token 校验原理,具体操作步骤有以下几步: 1.后端生成 csrf_token 的值,在前端请求登录或者注册界面的时候将值传给前端,传给前端的方式可能有以下两种: 在模板中的 Fr ...

  8. Linux学习总结(18)——Linux使用init命令关机、重启、切换模式

    reboot可能是每个用过Linux的人都知道的命令,但有一个命令"init"才是命令中的精英. 最近有个同事学习安装了CentOS,明明安装的是带桌面的系统,但是启动后进入了命令 ...

  9. [Codeforces 876]比赛记录

    上场$rating$果然炸飞,但是据说这次只要不$FST$就能翻回来QWQ? T1  $dfs$乱搞? T2  取模乱搞,$STL$ $vector$大法好(%%%$ryf$秒出做法) T3  看了半 ...

  10. Minimum Sum LCM(uva 10791)

    题意(就是因为读错题意而wa了一次):给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 例如12,是1和12的最小公倍数,是3和4的最小公倍数,是1 ...