2021.05.03 T3 数字
2021.05.03 T3 数字
问题描述
一个数字被称为好数字当他满足下列条件:
1. 它有**2*n**个数位,n是正整数(允许有前导0)
2. 构成它的每个数字都在给定的数字集合S中。
3. 它**前n位之和与后n位之和相等**或者它**奇数位之和与偶数位之和相等**
例如对于n=2,S={1,2},合法的好数字有1111,1122,1212,1221,2112,2121,2211,2222这样8种。
已知n,求合法的好数字的个数mod 999983。
输入
第一行一个数n。
接下来一个长度不超过10的字符串,表示给定的数字集合。
输出
一行一个数字表示合法的好数字的个数mod 999983。
样例输入
2
0987654321
样例输出
1240
数据范围
对于20%的数据,n≤7。
对于100%的.据,n≤1000,|S|≤10。
分析:
设f[i][j]为当数字规模为i且各数为位数字之和为j时的好数字个数,f[i+1][j+s[k]]的方案数中一定有f[i][j]的方案数,所以f[i+1][j+s[k]]=f[i][j]+f[i+1][j+s[k]]。把左半部分看成一个名为A的位置,把右半部分看成一个名为B的位置,A和B上都有f[i][j]中方案数,则在i与j一定时,一共有A*B种方案数。
把n个数划分为i部分,则i的取值范围是1n,当i=0是,A(或B)这一位置上只有一种放法——什么都不放,在这一题就是没有任何方案.当i个位置上所有数字全是9时,j最大,j的取值范围是sminismaxi,但集合s中不一定有9,所以需要判断一下smax与smin,实际上不用单独找,sort排序一下或直接判断有没有f[i][j]。
前后和相等和奇偶位和相等与每个小位置上具体是哪个数字以及到底有那些数字无关,只与和有关,所以前后和相等的方案数与奇偶位和相等的方案数相等。设总方案数为ans,ans=奇偶位和相等的方案数+前后位和相等的方案数-前后位相等的方案数与奇偶位和相等的方案数的交集。
当前后位和相等的方案数=奇偶位和相等的方案数时,前位奇数位和=后位偶数位和,前位偶数位和=后位奇数位和,当从集合s中选取的数字不变时,前位奇数位和可以做后位奇数位和。设前位奇数位和为C,则与之相对的后位奇数为和为D,则交集方案数为C*D。
PS:
if(f[x][i])fin=(fin+(ll)f[x][i]*f[x][i])%mod;
此处如果先乘后转为long long会爆int,所以不能把ll后面的乘法用括号括住
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define mod 999983
typedef long long ll;
int n,s[12],f[1005][9005];
ll ans=0;
string si;
ll add(int x){
ll fin=0;
for(int i=0;i<=x*9;i++)
if(f[x][i])fin=(fin+(ll)f[x][i]*f[x][i])%mod;
return fin;
}
int main(){
freopen("num.in","r",stdin);
freopen("num.out","w",stdout);
cin>>n>>si;
for(int i=0;i<si.size();i++)s[i+1]=si[i]-'0';
sort(s+1,s+si.size()+1);
f[0][0]=1;
for(int i=0;i<n;i++){
for(int j=0;j<=n*9;j++){
if(f[i][j]){
for(int k=1;k<=si.size();k++){
f[i+1][j+s[k]]=(f[i+1][j+s[k]]+f[i][j])%mod;
}
}
}
}
ans=(2*add(n)-add(n/2)*add(n-n/2))%mod;
cout<<(ans+mod)%mod;
return 0;
}
2021.05.03 T3 数字的更多相关文章
- 2021.05.03【NOIP提高B组】模拟 总结
比较水的一场比赛,却不能 AK T1 有 \(n\) 次,每次给 \(A_i,B_i\) 问以 \(i\) 结尾的 \(A,B\) 的匹配中最大和的最小值 问最大和的最小值,却不用二分. 如果暴力排序 ...
- http://www.cnblogs.com/Matrix54/archive/2012/05/03/2481260.html
http://www.cnblogs.com/Matrix54/archive/2012/05/03/2481260.html
- 2021.11.03 P6175 无向图的最小环问题
2021.11.03 P6175 无向图的最小环问题 P6175 无向图的最小环问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给定一张无向图,求图中一个至少包含 33 ...
- 2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed)
2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed) [P2886 USACO07NOV]Cow Relays G - 洛谷 | 计算机科学教育新生 ...
- 2021.05.14 tarjan
2021.05.14 tarjan 标准版tarjan 这里使用数组来模拟栈 void tarjan(int x){ ++ind; dfn[x]=low[x]=ind; stacki[++top]=x ...
- 2021.08.03 BZOJ 疯狂的馒头(并查集)
2021.08.03 BZOJ 疯狂的馒头(并查集) 疯狂的馒头 - 题目 - 黑暗爆炸OJ (darkbzoj.tk) 重点: 1.并查集的神奇运用 2.离线化 题意: 给一个长为n的序列,进行m次 ...
- 2021.08.03 P1197 星球大战(并查集)
2021.08.03 P1197 星球大战(并查集) [P1197 JSOI2008]星球大战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.可以离线处理.把在线变为离 ...
- 2021.08.01 P4311 数字序列(左偏树)
2021.08.01 P4311 数字序列(左偏树) [P4331 BalticOI 2004]Sequence 数字序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1 ...
- 【2021新】C#数字格式化字符串
引用来源: https://www.cnblogs.com/flyingbread/archive/2007/01/18/620287.html https://www.cnblogs.com/117 ...
随机推荐
- Discuz 7.x、6.x 全局变量防御绕过导致代码执行
0x01 分析 由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致REQUEST中不再包含_REQUEST中不再包含REQUEST中不再包含_COOKIE, ...
- luoguP4859 已经没有什么好害怕的了(二项式反演)
luoguP4859 已经没有什么好害怕的了(二项式反演) 祭奠天国的bzoj. luogu 题解时间 先特判 $ n - k $ 为奇数无解. 为了方便下记 $ m = ( n + k ) / 2 ...
- java-规约-日期和时间
public class DateTime { public static void main(String[] args) { /**1 * 日期格式化时,传入的pattern表示年份统一用小写的y ...
- SpringDataJdbc命名查询
当使用SpringDataJdbc命名查询时,需要配置几处:官方文档:https://docs.spring.io/spring-data/jdbc/docs/2.0.4.RELEASE/refere ...
- 学习Haproxy (七)
haproxy是个高性能的tcp和http的反向代理.它就是个代理.不像nginx还做web服务器 官网地址为www.haproxy.org nginx的优点和缺点 ? 1 2 3 4 5 6 7 8 ...
- 学习zabbix(二)
超大规模门户网站集群架构: 运维30%的时间都在监控,监控要多维度: 监控(单机监控(系统监控).网络监控.应用监控.分布式监控): 业务监控(业务指标-->流量分析-->舆论监控): 流 ...
- SVN报错之“Error: Please execute the 'Cleanup' command. ”
问题 Error: Please execute the 'Cleanup' command. 需要清理下,注意SVN拉数据的时候别打开其中的问题 解决方案
- 与和或(&&和||)比较的区别
&&(短路与)和&(逻辑与)的时候: 有假则为假,全真则为真(有假必假,全真为真) ||(短路或)和|(逻辑或)的时候: 有真则为真,全假则为假(有真必真,全假为假)
- java弹框
Java弹窗操作 1.任务简介 本博客介绍两种Java弹窗操作的方法,第一个种是通过弹出对话框显示用户输入的信息,第二种是通过用户输入数字的不同打开不同的程序. 2.弹出对话框的操作 1)任务内容编程 ...
- 获取Java数据库中结果集的每个字段名和个数
/** * 查询到多条数据, 封装到List<Map> */public List<Map<String, Object>> queryForMapList(Str ...