模拟+算贡献——cf1195D
比赛的时候没看到模数,用java大数在写,最后看到的时候已经慌了。。
把贡献算清楚就可以
下面是贡献的推导
有五位数 abcde * 10个
有两位数 fg * 3 个
那么这两种数组成的情况就是 abcdfeg 或 abcfdge,现在只考虑五位数在前,两位数在后的情况,
五位数的情况是abcd_e_,每个五位数出现了3次,那直接把10个五位数在每位上求和,然后这个五位数的贡献*3,
两位数的情况是____f_g,每个两位数出现了10次,那么也直接把3个两位数在每位上求和,然后这个两位数的贡献*10
#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
#define ll long long
#define mod 998244353
ll n,a[maxn],A[];
ll cnt[],x[][];
void calc(ll a){
ll len=,tmp=a,pos=;
while(tmp){
tmp/=;len++;
}
cnt[len]++; tmp=a;
while(tmp){
pos++;
x[len][pos]+=tmp%;
tmp/=;
}
} ll f(int i,int j){
ll res1=,res2=;
if(i>j){
for(int k=;k<=j;k++){
res2=(res2+x[j][k]*A[k*-]%mod)%mod;
res1=(res1+x[i][k]*A[k*]%mod)%mod;
}
for(int k=j+;k<=i;k++)
res1=(res1+x[i][k]*A[j+k]%mod)%mod;
}
else if(i==j){
for(int k=;k<=i;k++){
res2=(res2+x[j][k]*A[k*-]%mod)%mod;
res1=(res1+x[i][k]*A[k*]%mod)%mod;
}
}
else if(i<j){
for(int k=;k<=i;k++){
res2=(res2+x[j][k]*A[k*-]%mod)%mod;
res1=(res1+x[i][k]*A[k*]%mod)%mod;
}
for(int k=i+;k<=j;k++)
res2=(res2+x[j][k]*A[k+i]%mod)%mod;
}
return (res1*cnt[j]+res2*cnt[i]%mod)%mod;
} int main(){
cin>>n;
A[]=;
for(int i=;i<=;i++)A[i]=A[i-]*%mod;
for(int i=;i<=n;i++){
cin>>a[i];
calc(a[i]);
}
ll ans=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(cnt[i] && cnt[j])
ans=(ans+f(i,j))%mod;
cout<<ans<<endl;
}
模拟+算贡献——cf1195D的更多相关文章
- Codeforces Round #289 (Div. 2, ACM ICPC Rules) E. Pretty Song 算贡献+前缀和
E. Pretty Song time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- 2019牛客多校第七场 F Energy stones 树状数组+算贡献转化模拟
Energy stones 题意 有n块石头,每块有初始能量E[i],每秒石头会增长能量L[i],石头的能量上限是C[i],现有m次时刻,每次会把[s[i],t[i]]的石头的能量吸干,问最后得到了多 ...
- hdu 5228 OO’s Sequence(单独取数算贡献)
Problem Description OO has got a array A of size n ,defined a function f(l,r) represent the number o ...
- 线性基算贡献——19牛客多校第一场H
/* 给定数组a[],求有多少集合的异或值为0,将这些集合的大小之和求出来 对于每个数来说,如果除去这个数后数组里做出的线性基和这个数线性相关,那么这个数贡献就是2^(n-1-线性基的大小) 反之这个 ...
- hdu 5525 Product 数论算贡献
Product Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Proble ...
- Codeforces 903 绝对值1e19longdouble算贡献 汉明距离交换两项是否可行
A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...
- GitBash上传代码不计入贡献的问题处理
发现最近写的代码,通过GitBash上传到github,但是格子确一个都没亮,今天通过一番检索解决了此问题,特做记录: 通过这篇文章找到了原因所在: GitHub 更新代码到底怎样才算贡献? 通过这篇 ...
- codeforces 425B Sereja and Table(状态压缩,也可以数组模拟)
题目 给出一个n*m的01矩阵, 让你最多改变k个里面的值(0变1,1变0), 使得0.1的连通分量是矩阵.输出最少步数 1 ≤ n, m ≤ 100; 1 ≤ k ≤ 10 题解: 如果01连通分量 ...
- PKUSC 模拟赛 题解_UPD
之前挖了两个大坑 一个是day1下午的第二题 另一个是day2上午的第五题 先说day1下午的第二题吧 我们显然不能O(n^2)的dp,所以我们只能算贡献 首先对于任意一个边界点而言,他对答案的贡献路 ...
随机推荐
- vue filters 日期
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- react-native run-android出现红屏错误
react-native run-android出现 unable to load script from assets 'index.android.bundle'.Make sure your b ...
- Delphi实现获取句柄并发送消息的方法(FindWindow、FindWindowEx、EnumChildWindows、SendMessage)
Delphi实现获取句柄并发送消息的方法 本文以实例形式详细说明了Delphi获取句柄并发送消息的方法,具体用法说明如下: 查找另外一个窗口的句柄: handle := FindWindow(nil, ...
- 【算法】BitMap
转自:https://www.seoxiehui.cn/article-45186-1.html 需求: 为满足用户标签的统计需求,小灰利用Mysql设计了如下的表结构,每一个维度的标签都对应着Mys ...
- 「ZJOI2019」线段树 解题报告
「ZJOI2019」线段树 听说有人喷这个题简单,然后我就跑去做,然后自闭感++,rp++(雾) 理性分析一波,可以发现最后形成的\(2^k\)个线段树,对应的操作的一个子集,按时间顺序作用到这颗线段 ...
- ItunesConnect:苹果内购项目元数据缺失
问题描述: 添加内购的App审核时被拒,原因为:ios内购 元数据丢失 问题原因: 审核信息里的 “审核屏幕快照” 和 “备注” 要填写,不然就失败的. 示例图: 1.屏幕快照和审核备注都需要填写 ...
- NYOJ 737 (石子合并)
该题是一道DP题,核心思想如下: 某个区间一定是这个区间内的某两个子区间合成的(这两个子区间互补,即这两个区间加起来等于大区间), 所以我们枚举所有的情况,取个最大值即可.因为最初是从2堆石子开始无法 ...
- 如何禁止C++默认成员函数
如何禁止C++默认成员函数 发表于 2016-03-02 | 分类于 C++ | 阅读次数 17 前言 前几天在一次笔试过程中被问到C++如何设计禁止调用默认构造函数,当时简单的想法是直 ...
- Linux的初始页表
LOWMEM,是相对于HIGHMEM而言,其实就是内核态直接映射的物理内存空间的大小,一般为896MB. 这里只是粗略地估计了一下,取1GB. LOWMEM_PAGES代表了LOWMEM区域对应了多少 ...
- java.lang.Boolean.compareTo()方法实例
compareTo接口 Comparable<Boolean>指定以下接口 参数 b - 布尔实例进行比较 返回值 方法返回 0 - 如果该对象表示相同的布尔值作为参数 一个正数值 - 如 ...