T1 工业题

这波行列看反就非常尴尬。。。。。口糊出所有正解想到的唯独行列看反全盘炸列(因为和T1斗智斗勇两个半小时。。。)

这题就是肯定是个O(n+m)的,那就往哪里想,a,b和前面的系数分开求,前面系数显然是小学学过的走步数方法问题,排列组合搞掉就行,a,b分别是向下走和向右走的步数。然后会打快速幂,会打费马小定理,会组合数学就可以过掉。这里关于系数有两种不同求法。

第一个是打表出的规律,第二个是按照(i,j)(n,m)的位置求得。

  1. 1 #include<bits/stdc++.h>
  2. 2 #define int long long
  3. 3 #define write(X) printf("%lld\n",X)
  4. 4 #define Min(A,B) ((A)<(B)?(A):(B))
  5. 5 #define Max(A,B) ((A)>(B)?(A):(B))
  6. 6 using namespace std;
  7. 7 inline int read(){
  8. 8 int x=0,f=1; char ch=getchar();
  9. 9 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
  10. 10 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
  11. 11 return x*f;
  12. 12 }
  13. 13 const int NN=5000005,p=998244353;
  14. 14 int n,m,a,b,s[NN],t[NN],diss[NN],dist[NN],pws[NN],pwt[NN];
  15. 15 int h[NN];
  16. 16 inline void mul(){ h[0]=1;for(int i=1;i<=5000000;i++) h[i]=h[i-1]*i%p;}
  17. 17 inline int qmo(int a,int b){
  18. 18 int ans=1,c=p; a%=c;
  19. 19 while(b){
  20. 20 if(b&1) ans=(ans*a)%c;
  21. 21 b>>=1; a=(a*a)%c;
  22. 22 } return ans;
  23. 23 }
  24. 24 inline int phi(int a){
  25. 25 int ans=1,b=p-2,c=p; a%=c;
  26. 26 while(b){
  27. 27 if(b&1) ans=(ans*a)%c;
  28. 28 b>>=1; a=(a*a)%c;
  29. 29 } return ans;
  30. 30 }
  31. 31 inline int C(int n,int m){
  32. 32 if(m==0) return 1;
  33. 33 return h[n]*phi(h[m])%p*phi(h[n-m])%p;
  34. 34 }
  35. 35 namespace WSN{
  36. 36 inline int main(){
  37. 37 n=read();m=read();a=read()%p;b=read()%p; mul();
  38. 38 int wsn=0;
  39. 39 for(int i=1;i<=n;i++) s[i]=read()%p;
  40. 40 for(int i=1;i<=m;i++) t[i]=read()%p;
  41. 41 for(int i=1;i<=n;i++){
  42. 42 int c=C(i+m-2,m-1);
  43. 43 diss[n-i+1]=s[n-i+1]*c%p;
  44. 44 }
  45. 45 for(int i=1;i<=m;i++){
  46. 46 int c=C(n+i-2,i-1);
  47. 47 dist[m-i+1]=t[m-i+1]*c%p;
  48. 48 }
  49. 49 for(int i=1;i<=n;i++){
  50. 50 pws[i]=qmo(a,m)*qmo(b,n-i)%p;
  51. 51 wsn=(wsn+diss[i]*pws[i]%p)%p;
  52. 52 }
  53. 53 for(int i=1;i<=m;i++){
  54. 54 pwt[i]=qmo(b,n)*qmo(a,m-i)%p;
  55. 55 wsn=(wsn+dist[i]*pwt[i]%p)%p;
  56. 56 }
  57. 57 write(wsn);
  58. 58 return 0;
  59. 59 }
  60. 60 }
  61. 61 signed main(){return WSN::main();}

小马的方法

  1. 1 #include<bits/stdc++.h>
  2. 2 #define int long long
  3. 3 #define write(X) printf("%lld\n",X)
  4. 4 #define Min(A,B) ((A)<(B)?(A):(B))
  5. 5 #define Max(A,B) ((A)>(B)?(A):(B))
  6. 6 using namespace std;
  7. 7 inline int read(){
  8. 8 int x=0,f=1; char ch=getchar();
  9. 9 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
  10. 10 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
  11. 11 return x*f;
  12. 12 }
  13. 13 const int NN=5000005,p=998244353;
  14. 14 int n,m,a,b,s[NN],t[NN],diss[NN],dist[NN],pws[NN],pwt[NN],h[NN];
  15. 15 inline int inv(int a){
  16. 16 int ans=1,b=p-2,c=p; a%=c;
  17. 17 while(b){
  18. 18 if(b&1) ans=(ans*a)%c;
  19. 19 b>>=1; a=(a*a)%c;
  20. 20 } return ans;
  21. 21 }
  22. 22 inline void mul(){ h[0]=h[1]=1;for(int i=2;i<=5000000;i++) h[i]=h[i-1]*i%p;}
  23. 23 inline int C(int n,int m){
  24. 24 if(m==0) return 1;
  25. 25 if(n==m) return 1;
  26. 26 return h[n]*inv(h[m])%p*inv(h[n-m])%p;
  27. 27 }
  28. 28 inline int qmo(int a,int b){
  29. 29 int ans=1,c=p; a%=c;
  30. 30 while(b){
  31. 31 if(b&1) ans=(ans*a)%c;
  32. 32 b>>=1; a=(a*a)%c;
  33. 33 } return ans;
  34. 34 }
  35. 35 namespace WSN{
  36. 36 inline int main(){
  37. 37 n=read();m=read();a=read()%p;b=read()%p;
  38. 38 mul(); int wsn=0;
  39. 39 for(int i=1;i<=n;i++){
  40. 40 int x=read()%p;
  41. 41 wsn=(wsn+C(n+m-i-1,m-1)*x%p*qmo(a,m)%p*qmo(b,n-i)%p)%p;
  42. 42 }
  43. 43 for(int i=1;i<=m;i++){
  44. 44 int y=read()%p;
  45. 45 wsn=(wsn+C(n+m-i-1,n-1)*y%p*qmo(b,n)%p*qmo(a,m-i)%p)%p;
  46. 46 }
  47. 47 write(wsn);
  48. 48 return 0;
  49. 49 }
  50. 50 }
  51. 51 signed main(){return WSN::main();}

正常方法

T2 卡常题

看到题解这句话就知道又是超纲题。。。。并不太懂。。。

听完讲就比较会了,将Y看成边,X看成点,这样的话先找到环上的一条边,然后删掉,分别用这条边的(u,v)为根跑一遍没有上司的舞会

然后呢,这波是STL的大胜利!!!

  1. 1 #include<bits/stdc++.h>
  2. 2 #define write(X) printf("%d\n",X)
  3. 3 #define Min(A,B) ((A)<(B)?(A):(B))
  4. 4 #define Max(A,B) ((A)>(B)?(A):(B))
  5. 5 using namespace std;
  6. 6 inline int read(){
  7. 7 int x=0,f=1; char ch=getchar();
  8. 8 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
  9. 9 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
  10. 10 return x*f;
  11. 11 }
  12. 12 const int NN=1e6+1e3;
  13. 13 int n,a,b,rt1,rt2;
  14. 14 bool vis[NN];
  15. 15 struct SNOW{int from,to,next;}; SNOW e[NN<<1]; int head[NN],rp;
  16. 16 map<int,int> mp[NN];
  17. 17 vector<int> vc[NN];
  18. 18 int dp[NN][2][2],w[NN];
  19. 19 inline void add(int x,int y){
  20. 20 e[++rp]=(SNOW){x,y,head[x]}; head[x]=rp;
  21. 21 e[rp+n]=(SNOW){y,x,head[y]}; head[y]=rp+n;
  22. 22 }
  23. 23 inline void dfs1(int x){
  24. 24 vis[x]=true;
  25. 25 for(int i=head[x];i;i=e[i].next) if(!vis[e[i].to]){
  26. 26 vc[x].push_back(e[i].to);
  27. 27 vc[e[i].to].push_back(x);
  28. 28 mp[x][e[i].to]=1;
  29. 29 mp[e[i].to][x]=1;
  30. 30 dfs1(e[i].to);
  31. 31 }
  32. 32 }
  33. 33 inline void dps(int x,int op){
  34. 34 dp[x][1][op]+=w[x]; vis[x]=1;
  35. 35 for(int i=0;i<vc[x].size();i++) if(!vis[vc[x][i]]){
  36. 36 int to=vc[x][i];
  37. 37 dps(to,op);
  38. 38 dp[x][0][op]+=dp[to][1][op];
  39. 39 dp[x][1][op]+=Min(dp[to][0][op],dp[to][1][op]);
  40. 40 }
  41. 41 }
  42. 42 namespace WSN{
  43. 43 inline int main(){
  44. 44 n=read(); a=read(); b=read();
  45. 45 for(int i=1;i<=n;i++){
  46. 46 int x=read(),y=read();
  47. 47 add(x,y); w[x]+=a; w[y]+=b;
  48. 48 }
  49. 49 dfs1(1);
  50. 50 for(int i=1;i<=n;i++){
  51. 51 int f=e[i].from,t=e[i].to;
  52. 52 if(mp[f].find(t)==mp[f].end()) rt1=f,rt2=t;
  53. 53 }
  54. 54 for(int i=1;i<=n;i++) vis[i]=0;
  55. 55 dps(rt1,0);
  56. 56 for(int i=1;i<=n;i++) vis[i]=0;
  57. 57 dps(rt2,1);
  58. 58 int ans=Min(dp[rt2][1][1],dp[rt1][1][0]);
  59. 59 write(ans);
  60. 60 return 0;
  61. 61 }
  62. 62 }
  63. 63 signed main(){return WSN::main();}

比较吊的STL打法(最劣解)

就非常带劲。。。。

T3 玄学题

第一眼看确实比较玄学。。。。这指数上套一个sigma就比较离谱,不过,既然看到了-1的指数,那我们就有必要讨论其奇偶性。

发现一个数的约数个数为奇数的情况当且仅当这个数是完全平方数。那么,我们只要找到这个值,便可以求出指数奇偶性,然后累加即可。

  1. 1 #include<bits/stdc++.h>
  2. 2 #define int long long
  3. 3 #define write(X) printf("%lld\n",X)
  4. 4 #define Min(A,B) ((A)<(B)?(A):(B))
  5. 5 #define Max(A,B) ((A)>(B)?(A):(B))
  6. 6 using namespace std;
  7. 7 inline int read(){
  8. 8 int x=0,f=1; char ch=getchar();
  9. 9 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
  10. 10 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
  11. 11 return x*f;
  12. 12 }
  13. 13
  14. 14 const int NN=1e7+1e5;
  15. 15 int n,m,pw[NN],cnt,p[NN],ans;
  16. 16 bool vis[NN];
  17. 17
  18. 18 namespace WSN{
  19. 19 inline int main(){
  20. 20 n=read(); m=read();
  21. 21 for(int i=2;i*i<=n;i++){
  22. 22 pw[++cnt]=i*i;
  23. 23 vis[i*i]=1;
  24. 24 }
  25. 25 for(int i=1;i<=cnt;i++)
  26. 26 for(int j=1;j*pw[i]<=n;j++)
  27. 27 if(vis[j]) continue;
  28. 28 else p[j*pw[i]]=j;
  29. 29 for(int i=1;i<=n;i++){
  30. 30 if(!p[i]) p[i]=i;
  31. 31 int numji=sqrt(m/p[i]);
  32. 32 ans+=numji%2==0? 1:-1;
  33. 33 }
  34. 34 write(ans);
  35. 35 return 0;
  36. 36 }
  37. 37 }
  38. 38 signed main(){return WSN::main();}

END


这次考试发现特殊性质可以帮助推出正解,并且数据范围可以知道此题的循环大体长什么样子。然后就是————

不要再刚题了!!!!!!!!!!!!!!!!!

最后给自己来一句:生日快乐~

Noip模拟13 2021.7.13:再刚题,就剁手&&生日祭的更多相关文章

  1. Noip模拟52 2021.9.13

    T1 异或 比较稳的切掉 观察数据范围,无法线性筛啥的,根号复杂度也会死,于是只能考虑$log$级 然后打表 发现当$n$为$2^i$时的答案是一个可递归数列: $1,3,7,15,31,63,127 ...

  2. Noip模拟38 2021.8.13

    T1 a 跟入阵曲很像,但是忘记入阵曲这题的思路是什么了 这里再提一下,入阵曲是子矩阵和是$k$的倍数,这道题目是子矩阵和是在一段区间内$[L,R]$ 因为这道题$n$特别小,$m$较大,考虑复杂度为 ...

  3. Noip模拟14 2021.7.13

    T1 队长快跑 本身dp就不强的小马看到这题并未反映过来是个dp(可能是跟题面太过于像那个黑题的队长快跑相似) 总之,基础dp也没搞出来,不过这题倒是启发了小马以后考试要往dp哪里想想 $dp_{i, ...

  4. Noip模拟76 2021.10.14

    T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 ...

  5. Noip模拟70 2021.10.6

    T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列, ...

  6. Noip模拟36 2021.8.11

    刚题的习惯还是改不了,怎么办??? T1 Dove打扑克 考场上打的动态开点线段树+并查集,考后发现自己像一个傻子,并查集就行.. 这几天恶补数据结构疯了 用树状数组维护后缀和,$siz_i$表示编号 ...

  7. [考试反思]阶段性总结:NOIP模拟测试7~13

    苟且Rank#1.第二次分机房结束. 得到了喘息一会的权利. 在最后两场考试中大脸skyh慷慨舍弃264分让出Rank#1的故事也十分感人 然而还是有很多东西值得思考. 虽说是反思,但是还是有一些地方 ...

  8. Noip模拟69 2021.10.5

    考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则 ...

  9. Noip模拟50 2021.9.10

    已经好长时间没有考试不挂分的良好体验了... T1 第零题 开场数据结构,真爽 对于这道题首先要理解对于一条链从上向下和从下向上走复活次数相等 (这可能需要晚上躺在被窝里面脑摸几种情况的样例) 然后就 ...

随机推荐

  1. JS019. 原生JS使用new Blob()实现带格式导出Word、Excel(提供无编程基础将页面上表格导出到本地的方法)

    导出效果 代码实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  2. 利用k8s yaml配置文件起一个http能够让外部访问

    1.首先建一个http的Deployment apiVersion: apps/v1 #版本信息 kind: Deployment #文件类型 metadata: #Deployment资源的元数据信 ...

  3. CodeForce-702C Cellular Network(查找)

    Cellular Network CodeForces - 702C 给定 n (城市数量) 和 m (灯塔数量): 给定 a1~an 城市坐标: 给定 b1~bm 灯塔坐标: 求出灯塔照亮的最小半径 ...

  4. python爬取疫情数据存入MySQL数据库

    import requests from bs4 import BeautifulSoup import json import time from pymysql import * def mes( ...

  5. 超详细的VMware安装ubuntu教程

    确定,然后重启.

  6. python学习笔记(十四)python实现发邮件

    import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart u ...

  7. 使用jemeter构造各种变量数据

    使用手动创建测试数据太麻烦,因此考虑用jmeter写了一些创建测试数据的脚本,针对那些变量非固定的数据可以利用函数来实现 通过函数助手添加各种变量数据 Tools--->函数助手 1:生成当前时 ...

  8. js模块化开发 AMD CMD Commonjs

    在es6全面实行开来之前  js实现模块开发方案有: 1.AMD 异步模块开发定义  依赖前置,requireJs应用了这一规范 require([module], callback); 加载完后回调 ...

  9. [转载]CentOS 7安装配置Samba服务器

    假设我们有这样一个场景 共享名路径权限SHAREDOC/smb/docs所有人员包括来宾均可以访问RDDOCS/smb/tech仅允许特定组的用户进行读写访问 特定组的组名为RD,目前的Alice.J ...

  10. Mybatis-Plus 全局Update更新策略,和insert插入查询策略

    前言 最近在使用mybatis-plus做项目的时候,发现使用updatById方法的时候,更新某个字段时候出现了问题,一般业务操作都是更新不为空的字段,结果发现更新了所有字段,这是由于mybatis ...