题意:给定n道题目,每道题目有k个选项,已知所有正确选项,选对1题得1分

问循环后移一格后总得分s2大于原先总得分s1的方案数

n<=2e5,1<=k<=1e9

思路:特判k=1

easy版本的话写了dp

dp[i][j]表示前i道题循环后s2比s1高j的方案数,j=【-n,n】,n方dp即可

hard版本注意到得分的方案是对称的,即s1>s2和s1<s2的方案数相等

所以问题转化为统计s1=s2的方案数

设s1正确s2不正确的位置为-1,反之为1,其余为0

考虑不同的位置有s个

枚举+1的位置,假设有i个,方案数为C(s,i)

-1的位置同样有i个,方案数为C(s-i,i)

其他s-2*i个位置都是0,每个位置上有(k-2)种选择,方案数为(k-2)^(s-2*i)

剩余相同的位置每个位置上有k种选择,方案数为k^(n-s)

合法的总方案数有k^n种,总方案数-s1=s2的方案数之后除2即为所求

easy版本

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int,int> PII;
typedef pair<ll,ll> Pll;
typedef vector<int> VI;
typedef vector<PII> VII;
typedef pair<ll,ll>P;
#define N 200000+10
#define M 200000+10
#define INF 1e9
#define fi first
#define se second
#define MP make_pair
#define pb push_back
#define pi acos(-1)
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
#define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
#define lowbit(x) x&(-x)
#define Rand (rand()*(1<<16)+rand())
#define id(x) ((x)<=B?(x):m-n/(x)+1)
#define ls p<<1
#define rs p<<1|1
#define fors(i) for(auto i:e[x]) if(i!=p) const int MOD=,inv2=(MOD+)/;
//int p=1e4+7;
//double eps=1e-6;
int dx[]={-,,,};
int dy[]={,,-,}; ll dp[][];
int a[N],b[N]; int read()
{
int v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} ll readll()
{
ll v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} int main()
{
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
int n=read(),k=read();
rep(i,,n) a[i]=read();
rep(i,,n) b[i%n+]=a[i];
if(k==)
{
printf("0\n");
return ;
}
int eps=n;
dp[][+eps]=; rep(i,,n)
{
if(a[i]==b[i])
{
rep(j,-n,n) dp[i][j+eps]=dp[i-][j+eps]*k%MOD;
continue;
}
rep(j,-n,n) dp[i][j+eps]=(dp[i-][j-+eps]+dp[i-][j++eps]+1ll*(k-)*dp[i-][j+eps]%MOD)%MOD;
}
ll ans=;
rep(i,,n) ans=(ans+dp[n][i+eps])%MOD;
printf("%I64d\n",ans);
return ;
}

hard版本

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int,int> PII;
typedef pair<ll,ll> Pll;
typedef vector<int> VI;
typedef vector<PII> VII;
typedef pair<ll,ll>P;
#define N 200000+10
#define M 200000+10
#define INF 1e9
#define fi first
#define se second
#define MP make_pair
#define pb push_back
#define pi acos(-1)
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
#define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
#define lowbit(x) x&(-x)
#define Rand (rand()*(1<<16)+rand())
#define id(x) ((x)<=B?(x):m-n/(x)+1)
#define ls p<<1
#define rs p<<1|1
#define fors(i) for(auto i:e[x]) if(i!=p) const int MOD=,inv2=(MOD+)/;
//int p=1e4+7;
//double eps=1e-6;
int dx[]={-,,,};
int dy[]={,,-,}; ll fac[N],inv[N];
int a[N],b[N]; int read()
{
int v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} ll readll()
{
ll v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} ll C(int x,int y)
{
if(y>x) return ;
return fac[x]*inv[y]%MOD*inv[x-y]%MOD;
} ll pw(ll x,ll y)
{
x%=MOD;
ll res=;
while(y)
{
if(y&) res=res*x%MOD;
x=x*x%MOD;
y>>=;
}
return res;
} int main()
{
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
int n=read(),k=read();
rep(i,,n) a[i]=read();
rep(i,,n) b[i%n+]=a[i];
if(k==)
{
printf("0\n");
return ;
}
int s=;
rep(i,,n)
if(a[i]!=b[i]) s++;
fac[]=;
rep(i,,2e5) fac[i]=fac[i-]*i%MOD;
inv[]=inv[]=;
rep(i,,2e5) inv[i]=inv[MOD%i]*(MOD-MOD/i)%MOD;
rep(i,,2e5) inv[i]=inv[i-]*inv[i]%MOD;
ll ans=,sum=;
rep(i,,s/)
{
ll tmp=C(s,i)*C(s-i,i)%MOD*pw(k-,s-i*)%MOD*pw(k,n-s)%MOD;
sum=(sum+tmp)%MOD;
}
ans=(pw(k,n)-sum+MOD)*inv2%MOD;
printf("%I64d\n",ans);
return ;
}

【CF1262F】Wrong Answer on test 233(数学)的更多相关文章

  1. Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) F2. Wrong Answer on test 233 (Hard Version) dp 数学

    F2. Wrong Answer on test 233 (Hard Version) Your program fails again. This time it gets "Wrong ...

  2. Codeforces 1262F Wrong Answer on test 233(组合数)

    E1:设dp[i][j],表示在第i个位置的当前新状态超过原状态j分的方案数是dp[i][j],那么对于这种情况直接进行转移即可,如果a[i]==b[i]显然k种选择都可以,不影响j,如果不一样,这个 ...

  3. CF1227F2 Wrong Answer on test 233 (Hard Version)

    题意 \(n\)道题,每道题有\(k\)种选项,其中第\(i\)道题正确答案是\(a_i\),但是填答案的时候填错啦,第一道题的选择填到了第二道题...第\(n\)道题的选择填到了第一道题,求在\(k ...

  4. Akka(4): Routers - 智能任务分配

    Actor模式最大的优点就是每个Actor都是一个独立的任务运算器.这种模式让我们很方便地把一项大型的任务分割成若干细小任务然后分配给不同的Actor去完成.优点是在设计时可以专注实现每个Actor的 ...

  5. 【LeetCode】数学(共106题)

    [2]Add Two Numbers (2018年12月23日,review) 链表的高精度加法. 题解:链表专题:https://www.cnblogs.com/zhangwanying/p/979 ...

  6. *HDU 2451 数学

    Simple Addition Expression Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  7. Codeforces Round #284 (Div. 2)A B C 模拟 数学

    A. Watching a movie time limit per test 1 second memory limit per test 256 megabytes input standard ...

  8. 家里蹲大学数学杂志 Charleton University Mathematics Journal 官方目录[共七卷493期,6055页]

    家里蹲大学数学杂志[官方网站]从由赣南师范大学张祖锦老师于2010年创刊;每年一卷, 自己有空则出版, 没空则搁置, 所以一卷有多期.本杂志至2016年12月31日共7卷493期, 6055页.既然做 ...

  9. java报表工具FineReport常用函数的用法总结(数学和三角函数)

    ABS ABS(number):返回指定数字的绝对值.绝对值是指没有正负符号的数值. Number:需要求出绝对值的任意实数. 示例: ABS(-1.5)等于1.5. ABS(0)等于0. ABS(2 ...

随机推荐

  1. Linx

    1. 2. 2. 3. 5. Vi 猜数字 第二十个裴伯拉数字 1 1 2 3 5 8 2 3 求小于3000的裴伯拉数列 4 5 递归方式1到100 和 6 7 100 以内奇数.偶数和 8 Sss ...

  2. java 8 date time 简单样例

    参考 Java 8 Time Api 使用指南-珍藏限量版 Java 8 中处理日期和时间示例 部分样例 import java.time.temporal.TemporalAdjusters; im ...

  3. excel批量修改文件名称

    步骤: 1. 然后将标准号所在的列复制三份到旁边相邻的空白列 2. 使用方方格子让三列中最左面的列只保存如下格式的数据: DB37/T或DB37/ 3. 使用方方格子让三列中中间的列的只保存如下格式的 ...

  4. python-day30(正式学习)

    单例模式 什么是单例模式 单例模式:基于某种方法实例化多次得到实例是同一个 为什么用单例模式 当实例化多次得到的对象中存放的属性都一样的情况,应该将多个对象指向同一个内存,即同一个实例 用类方法来实现 ...

  5. Hive 教程(六)-Hive Cli

    hive 有两种启动方式,一种是 bin/hive,一种是 hiveserver2, bin/hive 是 hive 的 shell 模式,所有任务在 shell 中完成,shell 就相当于 hiv ...

  6. 【原创】大叔经验分享(54)flume kudu sink运行一段时间kudu client报错

    flume kudu sink运行一段时间报错: 19/05/05 10:15:56 WARN client.ConnectToCluster: Error receiving a response ...

  7. O002、虚拟化

    参考https://www.cnblogs.com/CloudMan6/p/5233484.html   OpenStack 是云操作系统,要学习 OpenStack,首先需要掌握一些虚拟化和云计算的 ...

  8. 分布式的几件小事(十一)分布式session如何实现

    1.分布式会话是什么? 首先,我们知道浏览器有个cookie,在一段时间内这个cookie都存在,然后每次发请求过来都带上一个特殊的jsessionid cookie,就根据这个东西,在服务端可以维护 ...

  9. kinit: Bad encryption type while getting initial credentials

    描述:RHEL 6.x主机执行kinit -kt命令报如下错误 [heboan@localhost~]$ kinit -kt heboan.keytab heboan kinit: Bad encry ...

  10. docker toolbox的redis 配置主从及哨兵模式保证高可用

    redis 的缓存中间件安装方法,简单举例如下: 环境: docker toolbox 一   主从模式1 搜索redis镜像  docker search redis2 拉取镜像docker pul ...