对,如果你想把第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. 浅谈个人对客户端JavaScript同步、异步、执行顺序等概念的理解

    一.同步和异步的概念. 同步:即按代码的顺序执行任务. 在下列代码中,按照同步概念,则是先打印1后打印2. console.log(1); console.log(2); 异步:即执行一个任务的同时执 ...

  2. Siege 网站性能压力测试工具使用入门

    Siege is an open source regression test and benchmark utility. It can stress test a single URL with ...

  3. ASP.NET Web API 2系列(三):查看WebAPI接口的详细说明及测试接口

    引言 前边两篇博客介绍了Web API的基本框架以及路由配置,这篇博客主要解决在前后端分离项目中,为前端人员提供详细接口说明的问题,主要是通过修改WebApi HelpPage相关代码和添加WebAp ...

  4. 解决MVC中Model上的特性在EF框架刷新时清空的问题

    MVC中关于前端数据的效验一般都是通过在Model中相关的类上打上特性来实现. 但是在我们数据库发生改变,EF框架需要刷新时会把我们在Model上的特性全部清除,这样的话,我们前端的验证就会失效. 因 ...

  5. jsp隐含对象(内置对象)

    JSP共有以下9个内置的对象: request HttpServletRequest类的实例,用户端请求,此请求会包含来自GET/POST请求的参数 response HttpServletRespo ...

  6. SpringBootSecurity学习(24)前后端分离版之OAuth2.0 应用登记

    应用登记 一个应用要求 OAuth 授权,必须先到对方网站登记,让对方知道是谁在请求.举个例子,下面是github的登记页面: https://github.com/settings/applicat ...

  7. java的动手动脑10月20日

    (1)动手动脑 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { /*** @param args*/publi ...

  8. /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.5.3/lib/cocoapods/command.rb:118:in `git_version': Failed to extract git version from `git --version`

    问题及分析 今天做项目的时候,执行pod update报了如下错误信息: /usr/local/lib/ruby/gems/2.4.0/gems/cocoapods-1.5.3/lib/cocoapo ...

  9. centos7升级openssl、openssh常见问题及解决方法

    升级至openssl 1.1.1版本 升级至openssh 8.0版本 openssl version -a   当前查看版本 一.安装telnet (以防升级失败,连不上服务器,建议弄) #查看是否 ...

  10. 基于Prometheus和Grafana的监控平台 - 环境搭建

    相关概念 微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics. Logging - 用于记录离散的事件.例如,应用程序的调试信息或错误信息.它是我们诊断问题的依据. ...