[Shoi2017]分手是祝愿
时间:2019-09-23
本文章向大家介绍[Shoi2017]分手是祝愿,主要包括[Shoi2017]分手是祝愿使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
分析得知:
每个开关最多按一次,且最优一定是从后往前按(因为对约数有影响,前面的无法再影响到后面大的)
那么可以先处理出至少需要按几次“正确”的开关(从后往前保证都是按的正确的)
有一半的数据满足 k=n,或者k大于正确按的次数,这个时候与期望无关,直接从后往前按就行。
然后考虑到与期望有关的。
期望步数与是否按到正确开关有关。
设f[i]为从还需要按i次开关到还需要按i-1次开关的期望步数。
有i/n的概率这一步按到正确开关,(n-i)/n的概率按到错误开关。
如果按到错误开关,在之后的操作中需要将这个开关按回来,所以就多了一次--->f[i+1],按回来后,还要按i次才能到i-1次--->f[i],加上本身这一次的1。
式子化简一下
#include<bits/stdc++.h> #define LL long long #define N 100003 #define mod 100003 using namespace std; int read() { int x=0,f=1;char s=getchar(); while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();} while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();} return x*f; } void print(int x) { if(x<0){putchar('-');x=-x;} if(x>9)print(x/10); putchar(x%10+'0'); } int now[N]; LL f[N]; LL quick(LL a,LL x) { LL ans=1; while(x) { if(x&1)ans=ans*a%mod; a=a*a%mod;x>>=1; } return ans; } int main() { freopen("trennen.in","r",stdin); freopen("trennen.out","w",stdout); int n=read(),k=read(); for(int i=1;i<=n;++i)now[i]=read(); LL cnt=0; for(int i=n;i>=1;--i) if(now[i]) { cnt++; for(int j=1;j*j<=i;++j) if(i%j==0) { now[j]^=1; if(j*j!=i)now[i/j]^=1; } } if(cnt<=k) { for(int i=2;i<=n;++i) cnt=cnt*i%mod; printf("%lld\n",cnt); return 0; } f[n+1]=0; for(int i=n;i>k;--i)//从n推,最多按n次开关,从cnt开始推的话,可能一开始按错了很多步而f没有这种状态 f[i]=((n+(n-i)*f[i+1]%mod))%mod*quick(i,mod-2)%mod; LL ans=k; for(int i=k+1;i<=cnt;++i) ans=(ans+f[i])%mod; for(int i=2;i<=n;++i) ans=ans*i%mod; printf("%lld\n",ans); }
原文地址:https://www.cnblogs.com/yyys-/p/11574267.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 10 个用纯 Javascript 实现的好用插件
- Tensorflow ActiveFunction激活函数解析
- C++核心准则Con.1:默认情况下使对象不可修改
- 进化算法个体和指标的一致性
- matlab代码折叠与分节注释
- Flask从零到一 1 | 虚拟环境和第一个flask程序
- 按照元素指定条件筛选结构体数组
- 多目标优化按支配关系分层实现
- CentOS 7 解决丢失 nginx.pid
- $(function(){})和$(document).ready(function(){})
- javascript中的setTimeout() 方法和clearInterval() 方法和setInterval() 方法
- matlab生成数字1-n的列向量
- JavaScript中的匿名函数及函数的闭包
- ios下Safari无法触发click事件的处理
- 禁止网页右键、复制、另存为、查看源文件等功能