鉴于T3的惨烈程度,我决定先来颓篇题解。

T1 建设城市(city)

挡板法+容斥

m个建设队分成n组,每组必须有一个,先不考虑上限,共有 C(m-1,n-1)种方案。

有i个组是超过k个的,容斥掉 C(n,i)*C(m-i*k-1,n-1) 相当于把i×k个建设队拿出来,把剩下的m-i*k个建设队分成n组并且保证每个组都至少有一个且不考虑上界,再把这i个k放进n个分组里,就至少有i个组是大于k的。

#include<iostream>
#include<cstring>
#include<cstdio>
#define mod 998244353
#define ll long long
using namespace std;
ll n,m,k,fac[10001000],inv[10001000],facinv[10001000],ans;
ll C(ll x,ll y)
{if(y>x) return 0;return fac[x]*facinv[y]%mod*facinv[x-y]%mod;
}
int main()
{scanf("%lld%lld%lld",&n,&m,&k);if(n>m){puts("0");return 0;}fac[0]=1;facinv[0]=1;inv[1]=1;for(int i=1;i<=max(n,m);i++){if(i!=1) inv[i]=(mod-mod/i)*inv[mod%i]%mod;fac[i]=fac[i-1]*i%mod;facinv[i]=facinv[i-1]*inv[i]%mod;}for(int i=1;i<=n;i++){if(i&1) ans=(ans+C(n,i)*C(m-i*k-1,n-1))%mod;else ans=(ans-C(n,i)*C(m-i*k-1,n-1)+mod)%mod;}printf("%lld\n",(C(m-1,n-1)-ans+mod)%mod);return 0;
}

city

T2 轰炸行动(bomb)

考场好多看错题的,但是我没看错也没做出来(就是个废物)

移动是只要是有路径能到达就可以,那么我们tarjan缩点,缩完点后建新图,找最长链,每个点的深度应是父节点深度+点的size(几个点缩在一起),topu或dfs求最长链(但dfs好像容易T)。

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct node
{int to,nxt;
}h[4001000],hh[4001000];
int n,m,nxt[4001000],tot,tet,cnt,dfn[1001000],low[1001000],s[1001000];
int top,num,whos[1001000],sz[1001000],du[1001000],dep[1001000],ans,nx[4001000];
bool is[1001000];
int max(int x,int y)
{return x>y?x:y;
}
void add(int x,int y)
{h[++tot].to=y;h[tot].nxt=nxt[x];nxt[x]=tot;
}
void ad(int x,int y)
{hh[++tet].to=y;hh[tet].nxt=nx[x];nx[x]=tet;
}
void tarjan(int x)
{dfn[x]=low[x]=++cnt;s[++top]=x;is[x]=1;for(int i=nxt[x];i;i=h[i].nxt){int y=h[i].to;if(!dfn[y]){tarjan(y);low[x]=min(low[x],low[y]);}else if(is[y]) low[x]=min(low[x],dfn[y]);}    if(dfn[x]==low[x]){num++;while(1){int tmp=s[top--];is[tmp]=0;whos[tmp]=num;sz[num]++;if(x==tmp) break;}}
}
void topu()
{queue<int>q;for(int i=1;i<=num;i++)if(du[i]==0) q.push(i),dep[i]=sz[i],ans=max(ans,dep[i]);while(q.size()){int x=q.front();q.pop();for(int i=nx[x];i;i=hh[i].nxt){int y=hh[i].to;du[y]--;dep[y]=max(dep[y],dep[x]+sz[y]);ans=max(ans,dep[y]);if(!du[y]) q.push(y);}}
}
int main()
{scanf("%d%d",&n,&m);int u,v;for(int i=1;i<=m;i++){scanf("%d%d",&u,&v);add(u,v);}for(int i=1;i<=n;i++)if(!dfn[i]) tarjan(i);for(int i=1;i<=n;i++){for(int j=nxt[i];j;j=h[j].nxt){int y=h[j].to;if(whos[i]!=whos[y]){ad(whos[i],whos[y]);du[whos[y]]++;}}}topu();printf("%d\n",ans);
}

bomb

T3 石头剪刀布(rps)

转载于:https://www.cnblogs.com/jrf123/p/11328044.html

8.9 NOIP模拟测试15 建设城市(city)+轰炸行动(bomb)+石头剪刀布(rps)相关推荐

  1. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

  2. NOIP模拟测试19「count·dinner·chess」

    反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...

  3. NOIP模拟测试49·50「养花·折射·画作·施工·蔬菜·联盟」

    一套题 养花 题解 分块\主席树 这里我用的是主席树 查询分段$1-(k-1)$找最大的,能向右找就向右找 for(ll nowl=1,nowr=k-1;nowl<=maxx;nowl+=k,n ...

  4. NOIP模拟测试39,思维禁锢专场「工业题·玄学题·卡常题」

    工业题 题解 抱歉,题解没时间写了 代码 #include<bits/stdc++.h> using namespace std; #define ll long long #define ...

  5. NOIP模拟测试「简单的区间·简单的玄学·简单的填数·简单的序列」

    简单的区间 $update$ 终于$AC$了 找到$(sum[r]+sum[l](sum表示以中间点为基准的sum)-mx)\%k==0$的点 注意这里$sum$表示是以$mid$为基准点,(即$su ...

  6. NOIP模拟测试21「折纸·不等式」

    折纸 题解 考试时无限接近正解,然而最终也只是接近而已了 考虑模拟会爆炸,拿手折纸条试一试,很简单 考你动手能力 代码 #include<bits/stdc++.h> using name ...

  7. NOIP模拟测试18「引子·可爱宝贝精灵·相互再归的鹅妈妈」

    待补 引子 题解 大模拟,注意细节 代码1 #include<bits/stdc++.h> using namespace std; int n,m;char a[1005][1005]; ...

  8. NOIP模拟测试10「大佬·辣鸡·模板」

    大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...

  9. NOIP模拟测试25

    这次考试后面心态爆炸了...发现刚了2h的T2是假的之后就扔掉了,草率地打了个骗分 T1只会搜索和m=0 最先做的T3,主要是发现部分分很多,当时第一眼看上去有87分(眼瞎了). 后来想了想,感觉一条 ...

最新文章

  1. 3:添加一个slave到已有的复制环境(基于二进制日志文件位置)
  2. 如何在移动设备上调试html5开发的网页
  3. 19.jsp生命周期
  4. Android 用户界面---样式和主题(Styles and Themes)(二)
  5. python列表存储字符串_Python 基础知识全篇-字符串列表
  6. 如何使用websocket实现前后端通信
  7. spring多线程获取不到bean_刚面完的字节跳动java研发面试题整理(含答案):线程+MySQL+Spring+JVM...
  8. android数据线接口分类,安卓手机数据线接口类型
  9. 手把手教你如何生成自己的二维码
  10. 漫步数理统计二十五——正态分布
  11. 傻瓜教程:手把手教你解决多个应用实例(附代码、手绘图)
  12. 直流有刷电机及Matlab/Simulink驱动仿真
  13. php文件怎么打开? 教你用什么软件打开php文件
  14. Three.js物理引擎与物体的相互作用——关联材质对摩擦力弹性影响、物体运动方式、作用力相关
  15. c语言工资对比java工资_三位同学历、同教龄、不同职称教师的工资对比
  16. 4. 写第一篇博客,最好的时间是今日,今时,今刻
  17. layui表格展示图片
  18. JavaScript的入门篇
  19. 大鼠半月板撕裂模型动物模型 用于评估潜在药物的疗效的有效模型
  20. 圈复杂度Cyclomatic complexity

热门文章

  1. JSON.parse 和 JSON.stringify
  2. 2016/11/14
  3. Operation not permitted - /usr/bin/xcodeproj
  4. Android 5.0 Screen pinning 屏幕固定功能
  5. MySQL安装编译时,/bin/rm: cannot remove `libtoolT': No such file or directory
  6. qt 实现拖动矩形角度_Qt 绘图之图形视图框架
  7. 世上可有后悔药?服务器里建快照
  8. 第六课:GNN的可解释性
  9. GRT上线Bancor提案已通过
  10. 介绍一份数据分析报告