先开坑。

md原题写挂我也真是。。。

100+20+10


白夜

打表大法吼

显然,不在环上的点对答案的贡献是 \((k-cycle)^{k-1}\) 。

打表得到环上的递推式,矩阵一下乘起来就好了。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. template <typename Tp>
  5. void read(Tp &x){
  6. x=0;char ch=1;int fh;
  7. while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
  8. if(ch=='-') ch=getchar(),fh=-1;
  9. else fh=1;
  10. while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
  11. x*=fh;
  12. }
  13. const int maxn=100007;
  14. const int maxm=200007;
  15. const int mod=998244353;
  16. int n,T;
  17. int Head[maxn],to[maxm],Next[maxm],tot=1;
  18. int aa,bb,k;
  19. bool vis[maxn];
  20. int col[maxn];
  21. int size[maxn],top[maxn],dep[maxn],fa[maxn];
  22. int son[maxn];
  23. void add(int x,int y){
  24. to[++tot]=y,Next[tot]=Head[x],Head[x]=tot;
  25. }
  26. namespace baoli{
  27. bool check(int x){
  28. vis[x]=1;
  29. for(int i=Head[x];i;i=Next[i]){
  30. int y=to[i];
  31. if(col[y]==col[x]) return false;
  32. if(vis[y]) continue;
  33. bool tmp=check(y);
  34. if(tmp==false) return false;
  35. }
  36. if(x==aa){
  37. if(col[aa]==col[bb]) return false;
  38. if(!vis[bb]){
  39. bool tmp=check(bb);
  40. if(tmp==false) return false;
  41. }
  42. }
  43. if(x==bb){
  44. if(col[aa]==col[bb]) return false;
  45. if(!vis[aa]){
  46. bool tmp=check(aa);
  47. if(tmp==false) return false;
  48. }
  49. }
  50. return true;
  51. }
  52. int dfs(int step){
  53. if(step==n+1){
  54. memset(vis,0,sizeof(vis));
  55. if(check(1)) return 1;
  56. else return 0;
  57. }
  58. int res=0;
  59. for(int i=1;i<=k;i++){
  60. col[step]=i;
  61. res=(res+dfs(step+1))%mod;
  62. }
  63. return res;
  64. }
  65. void MAIN(){
  66. while(T--){
  67. read(aa);read(bb);read(k);
  68. if(k==1&&n!=1){
  69. puts("0");continue;
  70. }
  71. printf("%lld\n",dfs(1));
  72. }
  73. }
  74. }
  75. namespace Try{
  76. struct Matrix{
  77. int mat[4][4],n;
  78. Matrix(){
  79. memset(mat,0,sizeof(mat));
  80. n=2;
  81. }
  82. void reset(){
  83. for(int i=1;i<=n;i++) mat[i][i]=1;
  84. }
  85. };
  86. Matrix Mul(Matrix a,Matrix b){
  87. Matrix c;c.n=a.n;
  88. int l=a.n;
  89. for(int i=1;i<=l;i++){
  90. for(int j=1;j<=l;j++){
  91. for(int k=1;k<=l;k++){
  92. c.mat[i][j]+=(a.mat[i][k]*b.mat[k][j]%mod);
  93. c.mat[i][j]%=mod;
  94. }
  95. }
  96. }
  97. return c;
  98. }
  99. Matrix fpow(Matrix x,int p){
  100. Matrix res;res.reset();
  101. while(p){
  102. if(p&1) res=Mul(res,x);p>>=1;
  103. x=Mul(x,x);
  104. }
  105. return res;
  106. }
  107. int ksm(int x,int p){
  108. int res=1;
  109. while(p){
  110. if(p&1) res=res*x%mod;p>>=1;
  111. x=x*x%mod;
  112. }
  113. return res;
  114. }
  115. void dfs1(int x,int f,int dp){
  116. dep[x]=dp,fa[x]=f,size[x]=1;
  117. int mx=-1;
  118. for(int i=Head[x];i;i=Next[i]){
  119. int y=to[i];
  120. if(y==f) continue;
  121. dfs1(y,x,dp+1);
  122. size[x]+=size[y];
  123. if(size[y]>mx) son[x]=y,mx=size[y];
  124. }
  125. }
  126. void dfs2(int x,int tp){
  127. top[x]=tp;
  128. if(!son[x]) return;
  129. dfs2(son[x],tp);
  130. for(int i=Head[x];i;i=Next[i]){
  131. int y=to[i];
  132. if(y==son[x]||y==fa[x]) continue;
  133. dfs2(y,y);
  134. }
  135. }
  136. int lca(int x,int y){
  137. while(top[x]!=top[y]){
  138. if(dep[top[x]]<dep[top[y]]) swap(x,y);
  139. x=fa[top[x]];
  140. }
  141. if(dep[x]>dep[y]) swap(x,y);
  142. return x;
  143. }
  144. int calc(int cyc){
  145. if(cyc==1) return 0;
  146. if(cyc==2){
  147. return k*(k-1)%mod;
  148. }
  149. Matrix base,ans;
  150. base.mat[1][1]=k-2,base.mat[1][2]=k-1,base.mat[2][1]=1;
  151. ans.mat[1][1]=k*(k-1)%mod;
  152. ans=Mul(ans,fpow(base,cyc-2));
  153. return ans.mat[1][1];
  154. }
  155. void MAIN(){
  156. dfs1(1,0,1);dfs2(1,1);
  157. int x,y,ans=0;
  158. while(T--){
  159. read(x);read(y);read(k);
  160. int lc=lca(x,y);int cyc=dep[x]+dep[y]-2*dep[lc]+1;
  161. ans=ksm(k-1,n-cyc);
  162. ans=(ans*calc(cyc))%mod;
  163. printf("%lld\n",ans);
  164. }
  165. }
  166. }
  167. signed main(){
  168. freopen("night.in","r",stdin);freopen("night.out","w",stdout);
  169. read(n);
  170. for(int x,i=2;i<=n;i++){
  171. read(x);
  172. add(x,i);add(i,x);
  173. }
  174. read(T);
  175. Try::MAIN();
  176. fclose(stdin);fclose(stdout);
  177. return 0;
  178. }

光明

区间最大字段和

GSS系列

样例太弱了...

这题被 \(O(n^2)\) 氧化钙过去了。。。

订正后代码:

  1. using namespace std;
  2. template <typename Tp>
  3. void read(Tp &x){
  4. x=0;char ch=1;int fh;
  5. while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
  6. if(ch=='-') ch=getchar(),fh=-1;
  7. else fh=1;
  8. while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
  9. x*=fh;
  10. }
  11. const int maxn=100007;
  12. int n,T;
  13. int w[maxn];
  14. int xx[maxn],yy[maxn];
  15. #define lfc (x<<1)
  16. #define rgc ((x<<1)|1)
  17. #define mid ((l+r)>>1)
  18. struct node{
  19. int sum,lf,rg,val;
  20. };
  21. int sum[maxn<<2],val[maxn<<2],rg[maxn<<2],lf[maxn<<2];
  22. void pushup(int x){
  23. sum[x]=sum[lfc]+sum[rgc];
  24. lf[x]=max(lf[lfc],sum[lfc]+lf[rgc]);
  25. rg[x]=max(rg[rgc],sum[rgc]+rg[lfc]);
  26. val[x]=max(max(val[lfc],val[rgc]),lf[rgc]+rg[lfc]);
  27. }
  28. void build(int x,int l,int r){
  29. if(l==r){
  30. int fff=1;
  31. if(xx[l]%2==1&&yy[l]%2==1) fff=-1;
  32. val[x]=sum[x]=lf[x]=rg[x]=fff*w[l];return;
  33. }
  34. build(lfc,l,mid);build(rgc,mid+1,r);
  35. pushup(x);
  36. }
  37. int L,R,need;
  38. node query(int x,int l,int r){
  39. if(L<=l&&r<=R) return (node){sum[x],lf[x],rg[x],val[x]};
  40. if(L>mid) return query(rgc,mid+1,r);
  41. if(R<=mid) return query(lfc,l,mid);
  42. node res,a1=query(lfc,l,mid),a2=query(rgc,mid+1,r);
  43. res.sum=a1.sum+a2.sum;
  44. res.lf=max(a1.lf,a1.sum+a2.lf);
  45. res.rg=max(a2.rg,a1.rg+a2.sum);
  46. res.val=max(max(a1.val,a2.val),a1.rg+a2.lf);
  47. return res;
  48. }
  49. void change_val(int x,int l,int r){
  50. if(l==r){
  51. int fff=1;
  52. if(xx[l]%2==1&&yy[l]%2==1) fff=-1;
  53. val[x]=sum[x]=lf[x]=rg[x]=fff*need;
  54. return;
  55. }
  56. if(L<=mid) change_val(lfc,l,mid);
  57. else change_val(rgc,mid+1,r);
  58. pushup(x);
  59. }
  60. int fffff;
  61. void change_qf(int x,int l,int r){
  62. if(l==r){
  63. sum[x]=lf[x]=rg[x]=val[x]=-w[l]*fffff;
  64. return;
  65. }
  66. if(L<=mid) change_qf(lfc,l,mid);
  67. else change_qf(rgc,mid+1,r);
  68. pushup(x);
  69. }
  70. void cz1(){
  71. int a,b;
  72. read(L);read(a);read(b);
  73. if(a%2==1&&b%2==1){fffff=1;
  74. change_qf(1,1,n);}
  75. else{
  76. fffff=-1;
  77. change_qf(1,1,n);
  78. }
  79. xx[L]=a,yy[L]=b;
  80. }
  81. void cz2(){
  82. read(L);read(need);
  83. change_val(1,1,n);
  84. w[L]=need;
  85. }
  86. void cz3(){
  87. read(L);read(R);
  88. printf("%d\n",query(1,1,n).val);
  89. }
  90. int main(){
  91. freopen("light.in","r",stdin);freopen("light.out","w",stdout);
  92. read(n);
  93. for(int i=1;i<=n;i++) read(w[i]);
  94. for(int i=1;i<=n;i++){
  95. read(xx[i]);read(yy[i]);
  96. }
  97. build(1,1,n);
  98. read(T);int op;
  99. while(T--){
  100. read(op);
  101. if(op==1) cz1();
  102. if(op==2) cz2();
  103. if(op==3) cz3();
  104. }
  105. return 0;
  106. }

暗雪

区间Dp+四边形不等式优化

这题数据被 \(O(n^4)\) 氧化钙过去了。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. template <typename Tp>
  5. void read(Tp &x){
  6. x=0;char ch=1;int fh;
  7. while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
  8. if(ch=='-') ch=getchar(),fh=-1;
  9. else fh=1;
  10. while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
  11. x*=fh;
  12. }
  13. const int maxn=407;
  14. const int INF=1e18;
  15. int n,kk,a[maxn];
  16. int dp[maxn][maxn][maxn];
  17. int opt[maxn][maxn],s[maxn];
  18. void Init(){
  19. read(n);read(kk);
  20. if(kk<=9&&(1<<kk)<n){
  21. puts("-1");exit(0);
  22. }
  23. for(int i=1;i<=n;i++){
  24. read(a[i]);
  25. }
  26. }
  27. void Work(){
  28. sort(a+1,a+n+1);
  29. for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];
  30. for(int i=1;i<=n;i++){
  31. for(int j=i;j<=n;j++){
  32. if(i==j) dp[i][j][0]=0;
  33. else dp[i][j][0]=INF;
  34. }
  35. }
  36. for(int k=1;k<=kk;k++){
  37. for(int i=1;i<=n;i++) opt[i][i]=i;
  38. for(int len=2;len<=n;len++){
  39. for(int l=1;l+len-1<=n;l++){
  40. int r=l+len-1;
  41. dp[l][r][k]=INF;
  42. for(int p=opt[l][r-1];p<=opt[l+1][r];p++){
  43. if(p+1>r) continue;
  44. int val=dp[l][p][k-1]+dp[p+1][r][k-1]+s[r]-s[l-1];
  45. if(val<dp[l][r][k]){
  46. dp[l][r][k]=val;opt[l][r]=p;
  47. }
  48. }
  49. }
  50. }
  51. }
  52. int div=__gcd(dp[1][n][kk],s[n]);
  53. printf("%lld/%lld\n",dp[1][n][kk]/div,s[n]/div);
  54. }
  55. signed main(){
  56. freopen("snow.in","r",stdin);freopen("snow.out","w",stdout);
  57. Init();
  58. Work();
  59. return 0;
  60. }

20191102 「HZOJ NOIP2019 Round #12」20191102模拟的更多相关文章

  1. 20191004 「HZOJ NOIP2019 Round #9」20191004模拟

    综述 第一次 rk1 ,激动. 题目是 COCI 18/19 Round #1 的三至五题. 得分 \(100+100+20\) \(\mathrm{cipele}\) 问题描述 HZOJ1313 题 ...

  2. 20191003 「HZOJ NOIP2019 Round #8」20191003模拟

    综述 试题为常州集训2019SCDay2 得分\(100+30(0)+28\) 时之终结 问题描述 HZOJ1310 题解 构造题. 发现部分分有一档是 \(Y\) 是 \(2^x\) ,于是自然想到 ...

  3. 20190922 「HZOJ NOIP2019 Round #7」20190922模拟

    综述 这次是USACO2019JAN Gold的题目. \(\mathrm{Cow Poetry}\) 题解 因为每句诗的长度一定是\(k\),所以自然而然想到背包. 设\(opt[i][j]\)代表 ...

  4. wsoj「G2016 SCOI2018 Round #12」建筑师

    传送门 小半个月前的测试,现在翻出来. 考试时我和sxyA了这题. 当时随便搞了个dp,dp[i][j]表示i个数能看到j个的情况数,考虑新加入一个比之前i-1个数都小的数,能看到它的情况是它加到第一 ...

  5. 「LibreOJ NOI Round #2」不等关系

    「LibreOJ NOI Round #2」不等关系 解题思路 令 \(F(k)\) 为恰好有 \(k\) 个大于号不满足的答案,\(G(k)\) 表示钦点了 \(k\) 个大于号不满足,剩下随便填的 ...

  6. LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿

    二次联通门 : LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 /* LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 dp 记录一下前驱 ...

  7. 「LibreOJ NOIP Round #1」七曜圣贤

    题目啰嗦:支持三个操作: 不可重复集合:1.加入一个数 2.删除一个数 3.恢复目前最早的一次删除的数 操作可能不合法,每次有效操作之后求集合的mex(最小没有出现过的数) 50组数据+1e6,必须O ...

  8. 「LibreOJ NOIP Round #1」旅游路线

    Description T 城是一个旅游城市,具有 nnn 个景点和 mmm 条道路,所有景点编号为 1,2,...,n1,2,...,n1,2,...,n.每条道路连接这 nnn 个景区中的某两个景 ...

  9. 「LibreOJ NOI Round #1」验题

    麻烦的动态DP写了2天 简化题意:给树,求比给定独立集字典序大k的独立集是哪一个 主要思路: k排名都是类似二分的按位确定过程. 字典序比较本质是LCP下一位,故枚举LCP,看多出来了多少个独立集,然 ...

随机推荐

  1. 数组中的第K个最大元素

    在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2输出: 5示 ...

  2. 算法问题实战策略 NTHLON

    地址 https://algospot.com/judge/problem/read/NTHLON #include <iostream> #include <vector> ...

  3. css3中calc、vw、vh、vmin、vmax 属性的应用及兼容性详解

    一. calc()的使用什么是calc()? calc()从字面我们可以把他理解为一个函数function.其实calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,用来指定 ...

  4. 使用canal增量同步mysql数据库信息到ElasticSearch

    本文介绍如何使用canal增量同步mysql数据库信息到ElasticSearch.(注意:是增量!!!) 1.简介 1.1 canal介绍 Canal是一个基于MySQL二进制日志的高性能数据同步系 ...

  5. Web自动化测试Selenium 学习笔记(一)

    1.Web自动化测试简介自动化基础:自动化用例编写.Selenium优势及原理.自动化环境搭建Selenium基础:常见8大元素定位(表格).常见元素处理.下拉框元素处理.不同窗口切换.元素进阶.元素 ...

  6. Python的条件锁与事件共享

    1:事件机制共享队列: 利用消息机制在两个队列中,通过传递消息,实现可以控制的生产者消费者问题要求:readthread读时,writethread不能写:writethread写时,readthre ...

  7. pytest框架之parametries数据驱动参数化

    在测试用例的前面加上:@pytest.mark.parametrize('参数名', 列表数据) 参数名:用来接收每一项数据,并作为测试用例的参数 列表参数:一组测试数据(元组.列表.字典) 方式一: ...

  8. svn版本管理配置权限

    修改svn配置 编辑svnserve.conf文件 第19,20行删掉前面的#--意思就是打开 ancon-access = none  匿名用户不可读 auth-access = write 认证可 ...

  9. node.js中this指向失效解决

    问题:在外部单独使用类实例对象的方法,this没有指向该类实例对象 代码如下 class CQH { hello() { let name = this.name(); console.log(`He ...

  10. Spring Boot 2.X整合Spring-cache,让你的网站速度飞起来

    计算机领域有人说过一句名言:“计算机科学领域的任何问题都可以通过增加一个中间层来解决”,今天我们就用Spring-cache给网站添加一层缓存,让你的网站速度飞起来. 本文目录 一.Spring Ca ...