A.count

本场比赛最难的题...

隔板法组合数容斥 xjb 搞搞就好了

  1. //by Judge
  2. #include<cstdio>
  3. #include<iostream>
  4. #define Rg register
  5. #define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
  6. #define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
  7. #define ll long long
  8. using namespace std;
  9. const int mod=998244353;
  10. const int M=1e7+3;
  11. ll n; int m,k,mx,r,ans,fac[M],inv[M];
  12. inline int mul(int x,int y){return 1ll*x*y%mod;}
  13. inline void Pls(int& x,int y){if((x+=y)>=mod)x-=mod;}
  14. inline int qpow(int x,int p=mod-2){ int s=1;
  15. for(;p;p>>=1,x=mul(x,x)) if(p&1) s=mul(s,x); return s;
  16. }
  17. inline int C(ll n,int m){
  18. if(n<mx) return mul(fac[n],mul(inv[m],inv[n-m]));
  19. Rg int s=inv[m]; fp(i,0,m-1) s=mul(s,(n-i)%mod); return s;
  20. }
  21. inline int f(int n){ if(n<0) return 0; int res=0,tp;
  22. fp(i,0,k) tp=mul(C(k,i),C(n-i*(m-1)+k-1,k-1)), // 选 i 个要放零头的,乘上其放置方案
  23. Pls(res,mul(i&1?mod-1:1,tp)); return res;
  24. }
  25. int main(){ scanf("%lld%d%d",&n,&m,&k);
  26. mx=k*m,r=n%m; if(!m) return !printf("0\n");
  27. fac[0]=1; fp(i,1,n) fac[i]=mul(fac[i-1],i);
  28. inv[n]=qpow(fac[n]); fd(i,n,1) inv[i-1]=mul(inv[i],i);
  29. fp(i,0,k) Pls(ans,mul(f(i*m+r-k),C((n-r)/m-i+k-1,k-1)));
  30. // 前面的 f ,求出零头放置方案(放到 k 个数上全都小于 m)
  31. // 后面的 C ,组合数解隔板法
  32. return !printf("%d\n",ans);
  33. }

tree

很水的题 \(n^2\) 的复杂度,随便搜搜就好了

  1. //by Judge
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<iostream>
  5. #define Rg register
  6. #define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
  7. #define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
  8. #define go(u) for(Rg int i=head[u],v=e[i].to;i;v=e[i=e[i].nxt].to)
  9. #define open(S) freopen(S".in","r",stdin),freopen(S".out","w",stdout)
  10. #define ll long long
  11. using namespace std;
  12. const int mod=998244353;
  13. const int M=1e5+3;
  14. typedef int arr[M];
  15. #ifndef Judge
  16. #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
  17. #endif
  18. char buf[1<<21],*p1=buf,*p2=buf;
  19. inline int Max(int x,int y){return x>y?x:y;}
  20. inline int Min(int x,int y){return x<y?x:y;}
  21. inline int mul(int x,int y){return 1ll*x*y%mod;}
  22. inline void Pls(int& x,int y){if((x+=y)>=mod)x-=mod;}
  23. inline int read(){ int x=0,f=1; char c=getchar();
  24. for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
  25. for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
  26. } int n,x,y,root,ans,a[M]; int pat,head[M];
  27. struct Edge{ int to,nxt; }e[M<<1];
  28. inline void add(int u,int v){
  29. e[++pat]={v,head[u]},head[u]=pat;
  30. e[++pat]={u,head[v]},head[v]=pat;
  31. }
  32. void dfs(int u,int fa,int mn,int mx){
  33. if(u>=root) Pls(ans,mul(mn,mx));
  34. go(u) if(v^fa) dfs(v,u,Min(mn,a[v]),Max(mx,a[v]));
  35. }
  36. int main(){ n=read(); fp(i,1,n) a[i]=read();
  37. fp(i,2,n) x=read(),y=read(),add(x,y);
  38. fp(i,1,n) dfs(root=i,0,a[i],a[i]); return !printf("%d\n",ans);
  39. }

distance

n·q ,水题,注意别炸精度就好了

  1. //by Judge
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<iostream>
  5. #define Rg register
  6. #define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
  7. #define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
  8. #define go(u) for(Rg int i=head[u],v=e[i].to;i;v=e[i=e[i].nxt].to)
  9. #define ll long long
  10. using namespace std;
  11. const int M=2003;
  12. typedef int arr[M];
  13. #ifndef Judge
  14. #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
  15. #endif
  16. char buf[1<<21],*p1=buf,*p2=buf;
  17. inline void cmax(ll& x,ll y){if(x<y)x=y;}
  18. inline int Min(ll x,ll y){return x<y?x:y;}
  19. inline int read(){ int x=0,f=1; char c=getchar();
  20. for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
  21. for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
  22. } char sr[1<<21],z[20];int CCF=-1,Z;
  23. inline void Ot(){fwrite(sr,1,CCF+1,stdout),CCF=-1;}
  24. inline void print(ll x,char chr='\n'){
  25. if(CCF>1<<20)Ot();if(x<0)sr[++CCF]=45,x=-x;
  26. while(z[++Z]=x%10+48,x/=10);
  27. while(sr[++CCF]=z[Z],--Z);sr[++CCF]=chr;
  28. } int n,q,root; ll ans,dis[M][M];
  29. int pat,head[M];
  30. struct Edge{ int to,val,nxt; }e[M<<1];
  31. inline void add(int u,int v,int w){
  32. e[++pat]={v,w,head[u]},head[u]=pat;
  33. e[++pat]={u,w,head[v]},head[v]=pat;
  34. }
  35. void dfs(int u,int fa,ll d){ dis[root][u]=d;
  36. go(u) if(v^fa) dfs(v,u,d+e[i].val);
  37. }
  38. int main(){ n=read(),q=read(); Rg int x,y,z;
  39. fp(i,2,n) x=read(),y=read(),z=read(),add(x,y,z);
  40. fp(i,1,n) dfs(root=i,0,0);
  41. while(q--){ x=read(),y=read(),ans=0;
  42. fp(i,1,n) cmax(ans,Min(dis[x][i],dis[y][i])); print(ans);
  43. } return Ot(),0;
  44. }

CSP-S全国模拟赛第二场 【nan】的更多相关文章

  1. NOI.AC NOIP模拟赛 第二场 补记

    NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...

  2. WC2019 全国模拟赛第一场 T1 题解

    由于只会T1,没法写游记,只好来写题解了... 题目链接 题目大意 给你一个数列,每次可以任取两个不相交的区间,取一次的贡献是这两个区间里所有数的最小值,求所有取法的贡献和,对 \(10^9+7\) ...

  3. [NOI.AC]NOI2019省选模拟赛 第二场

    传送门 Solution A. 一共有\(T\)组数据 每次询问你\([l,r]\)中有多少个数能被他的所有数位整除(如果数位中含有\(0\)忽略掉) 数位dp,咕咕咕 B. 题面略 考虑一个个只有两 ...

  4. Contest1592 - 2018-2019赛季多校联合新生训练赛第二场(部分题解)

    Contest1592 - 2018-2019赛季多校联合新生训练赛第二场 D 10248 修建高楼(模拟优化) H 10252 组装玩具(贪心+二分) D 传送门 题干 题目描述 C 市有一条东西走 ...

  5. NOI.AC NOIP模拟赛 第一场 补记

    NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...

  6. 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)

    以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...

  7. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  8. nowcoder(牛客网)提高组模拟赛第一场 解题报告

    T1 中位数(二分) 这个题是一个二分(听说是上周atcoder beginner contest的D题???) 我们可以开一个数组b存a,sort然后二分b进行check(从后往前直接遍历check ...

  9. NOI.AC: NOIP2018 全国模拟赛习题练习

    闲谈: 最后一个星期还是不浪了,做一下模拟赛(还是有点小虚) #30.candy 题目: 有一个人想买糖吃,有两家商店A,B,A商店中第i个糖果的愉悦度为Ai,B商店中第i个糖果的愉悦度为Bi 给出n ...

随机推荐

  1. maven项目解决pom.xml头部 http://maven.apache.org/xsd/maven-4.0.0.xsd报错的问题

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_36611526/article/d ...

  2. 字典,set

    字典 dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度 存取速度快 key-value存储方式,在放进去的时候,必须根据key算出v ...

  3. 容器内安装nvidia,cuda,cudnn

    /var/lib/docker/overlay2 占用很大,清理Docker占用的磁盘空间,迁移 /var/lib/docker 目录 du -hs /var/lib/docker/ 命令查看磁盘使用 ...

  4. ansible-乱

    工作机制:ssh 无客户端 工作方式: 1,CMDB 2,公有云私有云API 3,使用ad-hoc 4,ansible-playbook ansible 执行命令,底层调用传输连接模块,将命令或文件传 ...

  5. jquery animated选择器 语法

    jquery animated选择器 语法 作用::animated 选择器选取当前的所有动画元素.直线电机参数 语法:$(":animated") jquery animated ...

  6. UVa 572 Oil Deposits (Floodfill && DFS)

    题意 :输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块.如果两个字符“@”所在的格子相邻(横竖以及对角方向),就是说它们属于同一个八连块. 分析 :可以考虑种子填充深搜的方法.两重for循 ...

  7. 病毒 x

    04:病毒 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65535kB 描述 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字 ...

  8. (WCF) There is already a listener on IP endpoint 0.0.0.0:9999.

    有個nettcpbinding, service host總是不能起來,出現如題錯誤. 查了下,同樣的程序并沒有在進程裏面,但是看起來好像有其他的程序在占用這個Port C:\Program File ...

  9. centos-系统删除多余网卡的方法

    一.删除系统中中多余的ifcfg-eth0.bak Centos系统更改网卡或网卡MAC地址后会出现个eth0.bak配置备份文件解决方法:/etc/sysconfig/networking/devi ...

  10. Oracle-执行./runInstaller报错,弹不出图形界面

    [root@Apexmic Packages]# xhost + 无论是root用户还是oracle用户均执行了xhost + 但还是报以下错误 [oracle@Apexmic database]$ ...