Codeforces 1262F Wrong Answer on test 233(组合数)
E1:设dp[i][j],表示在第i个位置的当前新状态超过原状态j分的方案数是dp[i][j],那么对于这种情况直接进行转移即可,如果a[i]==b[i]显然k种选择都可以,不影响j,如果不一样,这个位置填了a[i]那么状态从dp[i-1][j+1]转移过来,如果填了b[i]就是dp[i-1][j-1]转移,当然也可以两个都不填,那么剩下一共是k-2种选择,j不变,最后答案将所有超过分数为正数的加起来即可,因此总体复杂度O(nk)。
E2:我们可以从E1的递推式子中发现,新状态超过原状态的方案和原状态超过新状态的方案这两者是等价的问题,那么我们可以进行简单使用总方案数减去分数相同的方案数最后除二就是答案,那么我们可以枚举新状态一共多原状态j分,原状态一共多新状态j分,因为这两者在最后是打平的,这两者在只有在a[i]!=b[i]的时候才会发生超对方一分的情况,那么我们记num为一共有多少个a[i]!=b[i]的情况,然后我们枚举共超过对方i分,那么我们需要从num中挑i次是选择的a,再从剩下的num-i次中选择b,那么还剩下nun-2*i的部分是a[i]!=b[i],但是又不能影响超过的分数,那么只能选既不是a[i]也不是b[i]共k-2中选择,那么乘上(k-2)(num-2*i),最后n-num的部分是a[i]==b[i],对于这部分不论取什么对于两者的贡献是一样的,那么一共有k种选择,所以最后再乘上k(n-num)即可。
O(nk)
// ——By DD_BOND #include<bits/stdc++.h> using namespace std; typedef long long ll; const int MOD=; ll dp[][];
int a[],b[]; int main(void)
{
ios::sync_with_stdio(false); cin.tie(); cout.tie();
ll n,k; cin>>n>>k;
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=n;i++) b[i]=a[i%n+];
dp[][n+]=;
for(int i=;i<=n;i++){
for(int j=;j<=*n+;j++){
if(a[i]==b[i]) dp[i][j]=dp[i-][j]*k%MOD;
else dp[i][j]=((dp[i-][j-]+dp[i-][j+])%MOD+dp[i-][j]*(k-)%MOD)%MOD;
}
}
ll ans=;
for(int i=n+;i<=*n+;i++) ans=(ans+dp[n][i])%MOD;
cout<<ans<<endl;
return ;
}
O(nlogk)
// ——By DD_BOND #include<bits/stdc++.h> using namespace std; typedef long long ll; const int MOD=;
const int MAXN=1e6+; ll qpow(ll a,ll n){ll sum=;while(n){if(n&)sum=sum*a%MOD;a=a*a%MOD;n>>=;}return sum;} int a[MAXN],b[MAXN];
int fac[MAXN],rfac[MAXN],inv[MAXN]; int C(int n,int m){
if(n-m<m) m=n-m;
if(m==) return ;
return 1ll*fac[n]*rfac[m]%MOD*rfac[n-m]%MOD;
} int main(void)
{
ios::sync_with_stdio(false); cin.tie(); cout.tie();
fac[]=rfac[]=inv[]=;
for(int i=;i<MAXN;i++) inv[i]=1ll*(MOD-MOD/i)*inv[MOD%i]%MOD;
for(int i=;i<MAXN;i++) fac[i]=1ll*fac[i-]*i%MOD,rfac[i]=1ll*rfac[i-]*inv[i]%MOD;
int n,k,num=,ans=; cin>>n>>k;
for(int i=;i<=n;i++) cin>>a[i];
if(k==) return cout<<<<endl,;
for(int i=;i<=n;i++)
if(a[i]!=a[i%n+])
num++;
for(int i=;*i<=num;i++) ans=(ans+1ll*C(num,i)*C(num-i,i)%MOD*qpow(k-,num-*i)%MOD*qpow(k,n-num)%MOD)%MOD;
cout<<(qpow(k,n)-ans+MOD)%MOD*inv[]%MOD<<endl;
return ;
}
Codeforces 1262F Wrong Answer on test 233(组合数)的更多相关文章
- 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 ...
- Codeforces 785D Anton and School - 2 (组合数相关公式+逆元)
D. Anton and School - 2 time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- CodeForces - 140E:New Year Garland (组合数&&DP)
As Gerald, Alexander, Sergey and Gennady are already busy with the usual New Year chores, Edward has ...
- CodeForces - 367E:Sereja and Intervals(组合数&&DP)
Sereja is interested in intervals of numbers, so he has prepared a problem about intervals for you. ...
- Codeforces 785D Anton and School - 2(组合数)
[题目链接] http://codeforces.com/problemset/problem/785/D [题目大意] 给出一个只包含左右括号的串,请你找出这个串中的一些子序列, 要求满足" ...
- Educational Codeforces Round 80 C. Two Arrays(组合数快速取模)
You are given two integers nn and mm . Calculate the number of pairs of arrays (a,b)(a,b) such that: ...
- codeforces 459C Pashmak and Buses(模拟,组合数A)
题目 跑个案例看看结果就知道了:8 2 3 题目给的数据是 n,k,d 相当于高中数学题:k个人中选择d个人排成一列,有多少种不同的方案数,列出其中n中就可以了. #include<iostre ...
- Codeforces 57C (1-n递增方案数,组合数取模,lucas)
这个题相当于求从1-n的递增方案数,为C(2*n-1,n); 取模要用lucas定理,附上代码: #include<bits/stdc++.h> using namespace std; ...
- 【CF1262F】Wrong Answer on test 233(数学)
题意:给定n道题目,每道题目有k个选项,已知所有正确选项,选对1题得1分 问循环后移一格后总得分s2大于原先总得分s1的方案数 n<=2e5,1<=k<=1e9 思路:特判k=1 e ...
随机推荐
- The Preliminary Contest for ICPC Asia Shanghai 2019 B. Light bulbs
题目:https://nanti.jisuanke.com/t/41399 思路:差分数组 区间内操作次数为奇数次则灯为打开状态 #include<bits/stdc++.h> using ...
- 监听ios自带返回功能
//1.一开始用这段代码,结果发现滚动都失效了,如果页面大于屏幕高度将无法滚动至底部,所以淘汰 // document.addEventListener('touchmove', function(e ...
- Redis高级命令及特性(安全性)
高级命令 keys * : 返回满足的所有键 ,可以模糊匹配 exists :是否存在指定的key,存在返回1,不存在返回0 exprie:设置某个key的过期时间 ttl:查看剩余时 ...
- 【Python】Python读取文件报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0x99 in position 20: illegal multibyte sequence
环境描述 text.txt 今天的天气不错 是个皻的选择 读取文件的代码 #!/usr/bin/python #-*- coding:UTF-8 -*- f = open(r'D:\Python\Py ...
- MUI注
1.调试模式: 边改边看:左侧显示代码,右侧实时观看修改效果.可以调出“浏览器控制台”观测数据变化效果. 真机运行:电脑和手机都安装“360手机助手”,手机安装“F:\Program Files\HB ...
- html上传文件
不太懂Html 做备用 html的文件上传分两个 第一个是Html文件 浏览器加载用的 另一个是PHP文件 处理上传文件的 下面是Html文件 叫index.html <html> < ...
- leetcode-mid-dynamic programming-62. Unique Paths
mycode time limited class Solution(object): def uniquePaths(self, m, n): """ :type ...
- 分析邮件日志从每秒处理3个结果到每秒处理800个结果过程(grep提速)
由于业务需要,对EDM发出的邮件日志进行分析处理,我要做的是预处理,把posfix杂乱无章的日志中找到我需要的数据. 我用javamail发的邮件,发送邮件时获取到是一个messageId,形如:21 ...
- IDEA集成Tomcat启动控制台乱码
解决方法: 在下图位置加上: -Dfile.encoding=UTF-8 然后安装下图设置: 如果上述方法重启tomcat还是乱码,那么: 进入idea的安装目录, 进入bin目录下.找到idea.e ...
- [VBA]获得工作表名称
sub 获得工作表名称() Dim i As Integer For i = 1 To Worksheets.Count Cells(i, 2) = Worksheets(i).Name Next E ...