对,如果你想把第5名粘进来,那么图片就是这么夸张。

然而和我并没有什么关系,实在是太菜了。

但是还是想吐槽出题人是真心没良心啊。。。做了达哥的良心题之后眼光极其挑剔

这套题的部分分设置非常愚蠢,唯一一个可用的部分分在T2,但是T2说的还很不清楚。

T2其实已经完成了最艰难的转化题意,但是最后败在了细节上。

T1也基本上是全场切,结果出锅了。

我想问一个问题啊:在时间比较紧的情况下,是应该打完题就打对拍,还是优先往下做题啊?

skyh就是没脸。去厕所遇到他的话我这场绝对炸。

发现T2题意前遇到的

我:我估计我60分

FACEFACE:那我肯定不止60分了。我发现T2的题意了,难题。

然后我差点就弃T2了,差点就只剩下50分了。。。

T1暴力弹栈暴力恢复,结果恢复的时候往栈里应该是倒序加,而不应该是正序。。。挂70

T2计算$C_n^3$时没除6锅了20分。

。。。

心情稍低沉。越发感觉自己像个傻子。

会题不一定不是傻子。

拿不到分那就是个傻子。。。

吸取教训吧。。。

对拍。要对拍。就你那个程度不打对拍肯定锅。

T1:树

因为我蠢所以没想到正解。考场上维护了一个单调栈,然后离线暴干。

会被蒲公英图/扫帚图干掉成$O(n^2)$。但是出题人保证数据随机。我没打正解我没脸。

正解很简单,按照递减序建树,倍增乱搞就行。没心情打了。

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>anc[],c[],id[],tmp[];
int fir[],l[],to[],cnt,n,q,w[],dep[];
int sta[],top,sdep[],sw[],ans[];
void link(int a,int b){l[++cnt]=fir[a];fir[a]=cnt;to[cnt]=b;}
bool com(int a,int b){return a>b;}
void dfs(int p,int fa){
dep[p]=dep[fa]+;
while(top&&sw[top]<=w[p])top--,tmp[p].push_back(sta[top+]);
sta[++top]=p;sw[top]=w[p];sdep[top]=dep[p];
for(int i=;i<id[p].size();++i){
int ed=lower_bound(sw+,sw++top,c[p][i],com)-sw,st=lower_bound(sdep+,sdep++top,dep[anc[p][i]])-sdep;
ans[id[p][i]]=max(,ed-st);
}
for(int i=fir[p];i;i=l[i])if(to[i]!=fa)dfs(to[i],p);
top--;
for(int i=(int)tmp[p].size()-;~i;--i)sta[++top]=tmp[p][i],sw[top]=w[sta[top]],sdep[top]=dep[sta[top]];
}
int main(){
scanf("%d%d",&n,&q);
for(int i=;i<=n;++i)scanf("%d",&w[i]);
for(int i=,x,y;i<n;++i)scanf("%d%d",&x,&y),link(x,y),link(y,x);
for(int i=,u,v,C;i<=q;++i)scanf("%d%d%d",&u,&v,&C),anc[u].push_back(v),c[u].push_back(C),id[u].push_back(i);
dfs(,);
for(int i=;i<=q;++i)printf("%d\n",ans[i]);
}

T2:环circle

其实虽说题目说的很不清楚,但是还是有很多提示的。

能从题目里隐隐约约得出以下信息:

竞赛图,环,最小。

看一眼数据范围,最小暴力分是n=300。这个只能是$O(n^3)$的复杂度了。

再把第一个样例的16个图都画出来,不难发现它要的就是三元环计数,不分起点。

求证:竞赛图如果有环,那么最小环一定是三元环

证明:

如果存在一个大于3元的环,那么对于其中任意距离大于等于2的两个点ab,在环上已经存在了一个顺时针和一个逆时针路径。

这时候因为图是竞赛图,ab两点之间也必须直接有边,这一条边能和顺时针路径或逆时针路径之一形成一个环。

这个环小于原来的环。这样的话大环会不断被分割成小的。直到环中不存在距离大于等于2的点,那么就只剩下了一个三元环。

证毕。

那么就是求三元环数量了。

30分:n<=300。

暴力枚举三个点。看贡献。

如果你一条边都不知道,那么可能形成2种环,一共$2^3=8$种情况,期望贡献1/4。

如果你只知道一条边,那么只能形成1种环,一共$2^2=4$种情况,期望贡献1/4。

如果你知道两条边,这两条边指向或背向同一个点,那么贡献是0,否则贡献1/2。

如果你三条边都知道。。。那就不用我说了吧。。。贡献0或1

+20分:e=0

全都是三条边都不知道的情况,是$\frac{1}{4} \times C_n^3$

+20分:e=n*(n-1)/2

全都是三条边都知道的情况,但是不能$n^3$枚举。

因为e<=1000000,所以可以知道n<=1500。

bitset枚举(也可以不用)。大力讨论。

100分:

考虑容斥。先让所有边都产生贡献。

然后产生负贡献的就是不合法的三元环:有两条边从同一个点指出。

然后考虑期望有多少这样的环。

枚举所有这样的点,考虑每一条不确定的边。

如果$p_i$表示这个点i有几条出边,有$q_i$条未知边。

答案减去$C_{p_i}^2 + \frac{C_{q_i}^2}{4} + \frac{p_i \times q_i}{2}$

 //可以证明,竞赛图只要存在环,那么最小的环大小一定是3
//所以问的就是图中期望有几个三元环
#include<cstdio>
#include<vector>
using namespace std;
vector<int>in[],out[];
#define qtr 250000002ll
#define hlf 500000004ll
#define mod 1000000007ll
int pow(long long b,int t,long long a=){for(;t;t>>=,b=b*b%mod)if(t&)a=a*b%mod;return a;}
int graph[][],n,e;long long ans;
int main(){
scanf("%d%d",&n,&e);
if(e==){
printf("%lld\n",qtr*n%mod*(n-)%mod*(n-)%mod*pow(,mod-)%mod);
}else if(n<=){
for(int i=,x,y;i<=e;++i)scanf("%d%d",&x,&y),graph[x][y]=,graph[y][x]=-;
for(int i=;i<=n;++i)for(int j=i+;j<=n;++j)for(int k=j+;k<=n;++k)
if((graph[i][j]!=)+(graph[j][k]!=)+(graph[i][k]!=)<=)ans+=qtr;
else if(graph[i][j]==&&graph[j][k]==&&graph[k][i]==)ans++;
else if(graph[i][j]==-&&graph[j][k]==-&&graph[k][i]==-)ans++;
else if(graph[i][j]==&&graph[j][k]==&&graph[k][i]==)ans+=hlf;
else if(graph[i][j]==-&&graph[j][k]==-&&graph[k][i]==)ans+=hlf;
else if(graph[i][j]==&&graph[j][k]==&&graph[k][i]==)ans+=hlf;
else if(graph[i][j]==-&&graph[j][k]==&&graph[k][i]==-)ans+=hlf;
else if(graph[i][j]==&&graph[j][k]==&&graph[k][i]==)ans+=hlf;
else if(graph[i][j]==&&graph[j][k]==-&&graph[k][i]==-)ans+=hlf;
printf("%lld\n",ans%mod);
}else if(e<<==n*(n-1ll)){
for(int i=,x,y;i<=e;++i)scanf("%d%d",&x,&y),graph[x][y]=;
for(int i=;i<=n;++i)for(int j=i+;j<=n;++j)if(graph[i][j])out[i].push_back(j);else in[i].push_back(j);
for(int i=;i<=n;++i)for(int j=;j<out[i].size();++j)for(int k=;k<in[i].size();++k)ans+=graph[out[i][j]][in[i][k]];
printf("%lld\n",ans%mod);
}
}

部分分打满

 //可以证明,竞赛图只要存在环,那么最小的环大小一定是3
//所以问的就是图中期望有几个三元环
#include<cstdio>
#include<vector>
using namespace std;
#define qtr 250000002ll
#define hlf 500000004ll
#define six 166666668ll
#define mod 1000000007ll
int pow(long long b,int t,long long a=){for(;t;t>>=,b=b*b%mod)if(t&)a=a*b%mod;return a;}
int p[],q[],n,e;long long ans;
int main(){
scanf("%d%d",&n,&e);
ans=1ll*n*(n-)%mod*(n-)%mod*six%mod;
for(int i=,x,y;i<=e;++i)scanf("%d%d",&x,&y),p[x]++,q[y]--,q[x]--;
for(int i=;i<=n;++i)q[i]+=n-;
for(int i=;i<=n;++i)ans=(ans-p[i]*(p[i]-1ll)/-1ll*p[i]*q[i]%mod*hlf%mod-q[i]*(q[i]-1ll)/%mod*qtr%mod+mod)%mod;
printf("%lld\n",ans);
}

AC

T3:礼物gift

$C_{a_i + b_i + a_j + b_j}^{a_i + a_j}$

$=\sum\limits_{t=0}^{a_i + a_j}C_{a_i +b_i}^{t} \times C_{a_j + b_j}^{a_i + a_j -t}$

$=\sum\limits_{t=-a_i}^{a_j}C_{a_i +b_i}^{t + a_i} \times C_{a_j + b_j}^{a_j -t}$

$=\sum\limits_{t=-a_i}^{b_i}C_{a_i +b_i}^{t + a_i} \times C_{a_j + b_j}^{a_j -t}$

然后就可以发现两部分式子已经分别只与i和j有关了。

带j的那一项关于t开一个桶,然后每次加一个新物品时先枚举t查找桶里的值,再往桶里放一下。

注意贡献答案时t的枚举范围与更新桶时的t的枚举范围是完全相反的。

拆开两部分分别算,改变枚举范围。这是这道题的难点。

 #include<cstdio>
#define mod 1000000007
int fac[],invv[],inv[],n,BUC[],*buc=BUC+,ans;
int Mod(int p){return p<mod?p:p-mod;}
int C(int b,int t){return (t<||t>b)?:1ll*fac[b]*inv[b-t]%mod*inv[t]%mod;}
main(){
fac[]=fac[]=invv[]=inv[]=inv[]=;
for(int i=;i<=;++i)fac[i]=1ll*fac[i-]*i%mod,invv[i]=mod-1ll*mod/i*invv[mod%i]%mod,inv[i]=1ll*inv[i-]*invv[i]%mod;
scanf("%d",&n);
for(int i=,a,b;i<=n;++i){
scanf("%d%d",&a,&b);
for(int t=-a;t<=b;++t)ans=Mod(ans+1ll*buc[-t]*C(a+b,a+t)%mod);
for(int t=-b;t<=a;++t)buc[-t]=Mod(buc[-t]+C(a+b,a-t));
}printf("%d\n",Mod(ans<<));
}

[考试反思]1018csp-s模拟测试79:荒谬的更多相关文章

  1. [考试反思]0718 NOIP模拟测试5

    最后一个是我...rank#11 rank#1和rank#2被外校大佬包揽了. 啊...考的太烂说话底气不足... 我考场上在干些什么啊!!! 20分钟“切”掉T2,又27分钟“切”掉T1 切什么切, ...

  2. [考试反思]0814NOIP模拟测试21

    前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...

  3. [考试反思]1109csp-s模拟测试106:撞词

    (撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...

  4. [考试反思]0909csp-s模拟测试41:反典

    说在前面:我是反面典型!!!不要学我!!! 说在前面:向rank1某脸学习,不管是什么题都在考试反思后面稍微写一下题解. 这次是真的真的运气好... 这次知识点上还可以,但是答题策略出了问题... 幸 ...

  5. [考试反思]0729NOIP模拟测试10

    安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...

  6. [考试反思]0714/0716,NOIP模拟测试3/4

    这几天时间比较紧啊(其实只是我效率有点低我在考虑要不要坐到后面去吹空调) 但是不管怎么说,考试反思还是要写的吧. 第三次考试反思没写总感觉缺了点什么,但是题都刷不完... 一进图论看他们刷题好快啊为什 ...

  7. [考试反思]1003csp-s模拟测试58:沉淀

    稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...

  8. [考试反思]0816NOIP模拟测试23

    210 210 210 170 还可以.暴力打满就rk4了? 但不管怎么说,总算是在改完题之后理直气壮的写考试反思了. T1是个dp,说水也不太水.(当然某脸只要A掉了一道题就要说那是水题) 我的思路 ...

  9. [考试反思]0801NOIP模拟测试11

    8月开门红. 放假回来果然像是神志不清一样. 但还是要接受这个事实. 嗯,说好听点,并列rank#7. 说难听点,垃圾rank#18. 都不用粘人名就知道我是哪一个吧... 因为图片不能太长,所以就不 ...

随机推荐

  1. Java读源码之Object

    前言 JDK版本: 1.8 最近想看看jdk源码提高下技术深度(比较闲),万物皆对象,虽然Object大多native方法但还是很重要的. 源码 package java.lang; /** * Ja ...

  2. 教你制作挂件头像 | 小程序七十二变之 canvas 绘制国旗头像

    昨天朋友圈被「请给我一面国旗@微信官方」刷屏,虽然知道是假的,但是从另一个角度来看,弄清楚如何实现更有趣. 1.canvas 这就不得不提到小程序中的 API canvas,H5 中也是有 canva ...

  3. maven解决无法从远程仓库获取ojdbc问题

    原因 Oracle 的 ojdbc.jar 是收费的,Maven 中央库中实际上没有此资源 解决方法 手动下载相应的jar,然后将其安装到本地仓库.具体操作如下: 1\先去下载相关的jar包或者驱动 ...

  4. Windows系统调用中API从3环到0环(上)

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中API从3环到0环(上) 如果对API在三 ...

  5. Web渗透之mssql差异备份getshell

    简介 差异备份数据库得到webshell.在sql server 里dbo和sa权限都有备份数据库权限,我们可以把数据库备份称asp文件,这样我们就可以通过mssqlserver的备份数据库功能生成一 ...

  6. [JZOJ100047] 【NOIP2017提高A组模拟7.14】基因变异

    Description 21 世纪是生物学的世纪,以遗传与进化为代表的现代生物理论越来越多的 进入了我们的视野. 如同大家所熟知的,基因是遗传因子,它记录了生命的基本构造和性能. 因此生物进化与基因的 ...

  7. 一次看懂 Https 证书认证

    TLS 传输层安全性协定 TLS(Transport Layer Security),及其前身安全套接层 SSL(Secure Sockets Layer)是一种安全协议,目的是为网际网路通信,提供安 ...

  8. spring cloud alibaba 简介

    ### Spring Cloud Alibaba [官方github地址](https://github.com/alibaba/spring-cloud-alibaba) Spring Cloud ...

  9. 1.Linux-CentOS7.6安装教程

    了解Linux Linux 就是一个操作系统,主要为企业提供支持与服务. 学习Linux需要具备什么基础?能看懂中文,能看懂简单的 English ​ 1.什么是Linux? Linux:和我们常见的 ...

  10. 图论-最短路径<Dijkstra,Floyd>

    昨天: 图论-概念与记录图的方法 以上是昨天的Blog,有需要者请先阅读完以上再阅读今天的Blog. 可能今天的有点乱,好好理理,认真看完相信你会懂得 分割线 第二天 引子:昨天我们简单讲了讲图的概念 ...