题面:https://www.cnblogs.com/Juve/articles/11436771.html

A:春思

我们对a分解质因数,则$a=\prod\limits_p^{p|a}p^k$

所以$a^b=\prod\limits_p^{p|a}p^{k*b}$

所以$ans=\prod\limits_p^{p|a}\sum\limits_{q=0}^{k*b}p^q$

然后等比数列求和

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. #define int long long
  7. using namespace std;
  8. const int MAXN=1e2+5;
  9. const int mod=9901;
  10. int a,b,num[MAXN],sum=0,ans=1,d[MAXN];
  11. int q_pow(int a,int b,int p){
  12. int res=1;
  13. while(b){
  14. if(b&1) (res*=a)%=p;
  15. (a*=a)%=p;
  16. b>>=1;
  17. }
  18. return res;
  19. }
  20. signed main(){
  21. scanf("%lld%lld",&a,&b);
  22. for(int i=2;i*i<=a;i++){
  23. if(a%i==0){
  24. d[++sum]=i;
  25. while(a%i==0){
  26. num[sum]++;
  27. a/=i;
  28. }
  29. (num[sum]*=b)%=(mod-1);
  30. }
  31. }
  32. if(a>1) d[++sum]=a,num[sum]=b%(mod-1);
  33. for(int i=1;i<=sum;i++)
  34. (ans*=(q_pow(d[i]%mod,(num[i]+1)%(mod-1),mod)-1+mod)%mod*q_pow((d[i]-1)%mod,mod-2,mod)%mod)%=mod;
  35. printf("%lld\n",ans);
  36. return 0;
  37. }

B:密州盛宴

如果我们统计后缀和,规定1为+1,0为-1,则如果有后缀和小于-1就不合法

如果中间出现了小于-1的情况,就把一个0放到第一的位置,然后把当前位置前的所有数向后移一位

因为我们要找的是操作的最大值,所以把所有数向后移一定是优的

然后统计这样的情况

但其实我们发现,对于上面的方法,扫一遍整个字符串,找出后缀最小值,然后答案就是最小值的相反数减一

然后我们优化这种方法

我们发现有循环的字符串

那么我们在每一个循环的字符串上统计答案

我们知道如果这一段字符串的和大于0,那么我们在第一段的时候更新答案

如果小于0,那么在最后一段更新答案

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #define int long long
  6. using namespace std;
  7. const int MAXN=1e6+5;
  8. int n,m,ans,res,cnt=0;
  9. char ch[MAXN];
  10. struct node{
  11. int t,sum,len,minn,cnt;
  12. }in[MAXN];
  13. signed main(){
  14. while(~scanf("%lld%lld",&n,&m)){
  15. if(n+m==0) break;
  16. ans=0x7ffffffffffffff;res=cnt=0;
  17. for(int i=1;i<=m;i++){
  18. scanf("%s%lld",ch+1,&in[i].t);
  19. in[i].len=strlen(ch+1);
  20. in[i].minn=0x7ffffffffffffff;
  21. in[i].sum=in[i].cnt=0;
  22. for(int j=in[i].len;j>=1;j--){
  23. if(ch[j]=='1') in[i].cnt++;
  24. in[i].sum+=(ch[j]=='1'?1:-1);
  25. in[i].minn=min(in[i].minn,in[i].sum);
  26. }
  27. cnt+=in[i].cnt*in[i].t;
  28. }
  29. if(cnt<n){
  30. puts("-1");
  31. continue;
  32. }
  33. in[m+1].sum=in[m+1].t=0;
  34. for(int i=m;i>=1;i--){
  35. res+=in[i+1].sum*in[i+1].t;
  36. if(in[i].sum>=0){
  37. ans=min(ans,res+in[i].minn);
  38. }else{
  39. ans=min(ans,res+in[i].sum*(in[i].t-1)+in[i].minn);
  40. }
  41. }
  42. if(ans>=0) puts("0");
  43. else printf("%lld\n",-ans-1);
  44. }
  45. return 0;
  46. }

C:赤壁情

咕咕咕~~

**dp

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cmath>
  6. #include<cstdlib>
  7. #include<ctime>
  8. using namespace std;
  9. int n,m,k,now=1,pre=0,bnd[105],base;
  10. double ans=0;
  11. void print(double a,int k){
  12. if(k==0) printf("%0.0lf\n",a);
  13. else if(k==1) printf("%0.1lf\n",a);
  14. else if(k==2) printf("%0.2lf\n",a);
  15. else if(k==3) printf("%0.3lf\n",a);
  16. else if(k==4) printf("%0.4lf\n",a);
  17. else if(k==5) printf("%0.5lf\n",a);
  18. else if(k==6) printf("%0.6lf\n",a);
  19. else if(k==7) printf("%0.7lf\n",a);
  20. else if(k==8) printf("%0.8lf\n",a);
  21. else if(k==9) printf("%0.9lf\n",a);
  22. }
  23. double f[2][105][3][15015];
  24. void work1(){
  25. base=7500;
  26. f[now][1][0][base-2]=f[now][1][2][base]=1;
  27. f[now][1][1][base-1]=2;
  28. bnd[1]=1;
  29. for(int i=2;i<=n;i++){
  30. now^=1;pre^=1;
  31. bnd[i]=min(i,n-i+1);
  32. int size=min(7500,i*(i+1));
  33. for(int j=1;j<=bnd[i];j++){
  34. for(int l=-size+base;l<=size+base;l++)
  35. for(int k=0;k<=2;k++)
  36. f[now][j][k][l]=0;
  37. }
  38. for(int j=1;j<=bnd[i-1];j++){
  39. for(int l=-size+base;l<=size+base;l++){
  40. f[now][j+1][0][l-i*2]+=f[pre][j][0][l]*(j+1);
  41. f[now][j][0][l]+=f[pre][j][0][l]*j*2;
  42. f[now][j-1][0][l+i*2]+=f[pre][j][0][l]*(j-1);
  43. f[now][j+1][1][l-i]+=f[pre][j][0][l]*2;
  44. f[now][j][1][l+i]+=f[pre][j][0][l]*2;
  45. f[now][j+1][1][l-2*i]+=f[pre][j][1][l]*j;
  46. f[now][j][1][l]+=f[pre][j][1][l]*(j*2-1);
  47. f[now][j-1][1][l+2*i]+=f[pre][j][1][l]*(j-1);
  48. f[now][j+1][2][l-i]+=f[pre][j][1][l];
  49. f[now][j][2][l+i]+=f[pre][j][1][l];
  50. f[now][j+1][2][l-2*i]+=f[pre][j][2][l]*(j-1);
  51. f[now][j][2][l]+=f[pre][j][2][l]*(j*2-2);
  52. f[now][j-1][2][l+2*i]+=f[pre][j][2][l]*(j-1);
  53. }
  54. }
  55. }
  56. for(int i=m;i<=base;i++) ans+=f[now][1][2][i+base];
  57. for(int i=2;i<=n;i++) ans/=(double)i;
  58. print(ans,k);
  59. return ;
  60. }
  61. int floor(__float128 x){
  62. for(int i=9;i>=0;--i){
  63. if(x>=i)
  64. return i;
  65. }
  66. }
  67. void print__float128(__float128 x,int ws){
  68. int sta[55];sta[0]=0;
  69. for(int i=1;i<=ws;++i){
  70. x*=10;
  71. sta[i]=floor(x);
  72. x-=floor(x);
  73. }
  74. x*=10;
  75. if(floor(x)>=5) sta[ws]++;
  76. for(int i=ws;i;--i){
  77. if(sta[i]==10) sta[i]=0,sta[i-1]++;
  78. }
  79. printf("%d.",sta[0]);
  80. for(int i=1;i<=ws;++i) printf("%d",sta[i]);
  81. puts("");
  82. }
  83. __float128 dp[2][105][3][15015];
  84. void work2(){
  85. base=2000;
  86. dp[now][1][0][base-2]=dp[now][1][2][base]=1;
  87. dp[now][1][1][base-1]=2;
  88. bnd[1]=1;
  89. for(int i=2;i<=n;i++){
  90. now^=1;pre^=1;
  91. bnd[i]=min(i,n-i+1);
  92. int size=min(2000,i*(i+1));
  93. for(int j=1;j<=bnd[i];j++){
  94. for(int l=-size+base;l<=size+base;l++)
  95. for(int k=0;k<=2;k++)
  96. dp[now][j][k][l]=0;
  97. }
  98. for(int j=1;j<=bnd[i-1];j++){
  99. for(int l=-size+base;l<=size+base;l++){
  100. dp[now][j+1][0][l-i*2]+=dp[pre][j][0][l]*(j+1);
  101. dp[now][j][0][l]+=dp[pre][j][0][l]*j*2;
  102. dp[now][j-1][0][l+i*2]+=dp[pre][j][0][l]*(j-1);
  103. dp[now][j+1][1][l-i]+=dp[pre][j][0][l]*2;
  104. dp[now][j][1][l+i]+=dp[pre][j][0][l]*2;
  105. dp[now][j+1][1][l-2*i]+=dp[pre][j][1][l]*j;
  106. dp[now][j][1][l]+=dp[pre][j][1][l]*(j*2-1);
  107. dp[now][j-1][1][l+2*i]+=dp[pre][j][1][l]*(j-1);
  108. dp[now][j+1][2][l-i]+=dp[pre][j][1][l];
  109. dp[now][j][2][l+i]+=dp[pre][j][1][l];
  110. dp[now][j+1][2][l-2*i]+=dp[pre][j][2][l]*(j-1);
  111. dp[now][j][2][l]+=dp[pre][j][2][l]*(j*2-2);
  112. dp[now][j-1][2][l+2*i]+=dp[pre][j][2][l]*(j-1);
  113. }
  114. }
  115. }
  116. __float128 ans=0;
  117. for(int i=m;i<=base;i++) ans+=dp[now][1][2][i+base];
  118. for(int i=2;i<=n;i++) ans/=(__float128)i;
  119. print__float128(ans,k);
  120. return ;
  121. }
  122. int main(){
  123. scanf("%d%d%d",&n,&m,&k);
  124. if(k<=8) work1();
  125. else work2();
  126. return 0;
  127. }

HZOI20190829模拟33题解的更多相关文章

  1. noip模拟33[进阶啦啦啦]

    noip模拟33 solutions 不知道该咋说,这场考试其实是我这三四场以来最最最最最顺心的一场了 为啥呢?因为我这回思考有很多结果,得到了脑袋的回复 就是你想了半个小时就有了一点点头绪,那感觉就 ...

  2. [CQOI2012]模拟工厂 题解(搜索+贪心)

    [CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...

  3. noip模拟33

    \(\color{white}{\mathbb{失足而坠千里,翻覆而没百足,名之以:深渊}}\) 这场考试的时间分配非常不科学 开题试图想 \(t1\) 正解,一个半小时后还是只有暴力,特别惊慌失措 ...

  4. [NOIP模拟33]反思+题解

    又考了一次降智题…… 拿到T1秒出正解(可能是因为我高考数学数列学的海星?),分解质因数以后用等比数列求和计算每个因子的贡献.但是当时太过兴奋把最后的$ans \times =$打成了$ans +=$ ...

  5. Noip模拟33垫底反思 2021.8.8

    T1 Hunter 考场上没写$%p$挂了25分.也是很牛皮,以后打完过了样例一定要检查 因为样例太小了......很容易忘记%%%% 正解随便手模就出来了. 1 #include<bits/s ...

  6. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  7. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  8. HGOI NOIP模拟4 题解

    NOIP国庆模拟赛Day5 题解 T1 马里奥 题目描述 马里奥将要参加 NOIP 了,他现在在一片大陆上,这个大陆上有着许多浮空岛,并且其中一座浮空岛上有一个传送门,马里奥想要到达传送门从而前往 N ...

  9. 10.8 wtx模拟题题解

    填坑 orz w_x_c_q w_x_c_q的模拟赛(150pts,炸了) money 题目背景: 王小呆又陷入自己的梦里.(活在梦里...) 题目描述: 王小呆是一个有梦想的小菜鸡,那就是赚好多好多 ...

随机推荐

  1. CSS——背景渐变

    在线性渐变过程中,颜色沿着一条直线过渡:从左侧到右侧.从右侧到左侧.从顶部到底部.从底部到顶部或着沿任何任意轴.如果你曾使用过制作图件,比如说Photoshop,你对线性渐变并不会陌生. 兼容性问题很 ...

  2. 学习js和jQuery总结

    数据类型的转换:1.字符串必须放在引号内2.字符串的转换有两个标签,string和tostring这两个函数.3.变量必须使用驼峰形式,把一个变量转换成字符串:console.log(isChild. ...

  3. echart数据的实时更新

  4. linxu(centos)安装php-fpm

    编译安装php-fpm 安装前准备 yum -y install gcc automake autoconf libtool make yum -y install gcc gcc-c++ glibc ...

  5. (一)通过JAVA连接SAP (sapjco3.jar在Windows和MacOS上的配置)

    (一)通过JAVA连接SAP调用接口 (sapjco3.jar在Windows和MacOS上的配置) 一.sapjoc3.jar获取 由于sap官网提供的链接需要合作公司提供账号密码,如果商用请索要正 ...

  6. YARN 原理简介

    YARN 组件 参考:Spark on Yarn | Spark,从入门到精通 YARN 采用 Master/Slave结构 ,包含ResourceManager 和 NodeManager Reso ...

  7. day 70 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

  8. 1.1python基础_基础

    1_编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: UTF-8 -*- ...

  9. Hibernate的多对一映射

    一.创建Java工程,新建Lib文件夹,加入Hibernate和数据库(如MySql.Oracle.SqlServer等)的Jar包,创建 hibernate.cfg.xml 文件,并配置,配置项如下 ...

  10. passwd的使用例子

    passwd 作为普通用户和超级权限用户都可以运行,但作为普通用户只能更改自己的用户密码,但前提是没有被root用户锁定:如果root用户运行passwd ,可以设置或修改任何用户的密码: passw ...