NOIP模拟38:b
这是T2。
一个容斥(其实也可以欧拉反演做,但是我不会)。
首先开一个桶,记录第i行的j有多少个。
然后枚举1~\(maxn\),枚举他的值域内的倍数,记录倍数在第i行有多少个,将个数记录在\(c[i][j]\)里
然后计算对每个j\(\prod_{i=1}^{n}(c[i][j]+1)\)
这个式子的意义是他的倍数的选法方案数,其中加一表示这一行不选的情况,展开后有一个1的常数项表示所有行都不选,是非法的,要减掉。
所以最终的方案数是他减一。
这是他倍数的选择方案,其中包括了以他为\(gcd\)的方案以及以他的倍数为\(gcd\)的方案。
所以要计算出以他的倍数为\(gcd\)的方案后在减掉才是以j为\(gcd\)的方案数,这一过程是逆推,对于一些i来说他的所有倍数(1倍除外)都不在值域内,他们的连乘结果就是以他们为\(gcd\)的方案数,可以以他们为起点逆推。
Code
#include<bits/stdc++.h>
using namespace std;
namespace STD
{
#define rr register
typedef long long ll;
const int inf=INT_MAX;
const int mod=1e9+7;
const int M=1e5+4;
const int N=22;
int n,m,maxn=-inf;
ll ton[N][M],cnt[N][M],c[M];
template<typename type>
inline type cmax(rr type x,rr type y){return x>y?x:y;}
int read()
{
rr int x_read=0,y_read=1;
rr char c_read=getchar();
while(c_read<'0'||c_read>'9')
{
if(c_read=='-') y_read=-1;
c_read=getchar();
}
while(c_read<='9'&&c_read>='0')
{
x_read=(x_read<<3)+(x_read<<1)+(c_read^48);
c_read=getchar();
}
return x_read*y_read;
}
};
using namespace STD;
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
int a=read();
ton[i][a]++;
maxn=cmax(maxn,a);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=maxn;j++)
for(int k=1;k*j<=maxn;k++)
cnt[i][j]+=ton[i][k*j];
for(rr int i=1;i<=maxn;i++)
{
c[i]=1ll;
for(rr int j=1;j<=n;j++)
c[i]=(c[i]*(cnt[j][i]+1))%mod;
c[i]--;
}
for(int i=maxn;i;i--)
for(int j=2;j*i<=maxn;j++)
c[i]=(c[i]-c[i*j]+mod)%mod;
ll ans=0ll;
for(rr int i=1;i<=maxn;i++)
ans=(ans+c[i]*i%mod)%mod;
printf("%lld\n",ans);
}
NOIP模拟38:b的更多相关文章
- Noip模拟38 2021.8.13
T1 a 跟入阵曲很像,但是忘记入阵曲这题的思路是什么了 这里再提一下,入阵曲是子矩阵和是$k$的倍数,这道题目是子矩阵和是在一段区间内$[L,R]$ 因为这道题$n$特别小,$m$较大,考虑复杂度为 ...
- 2021.8.13考试总结[NOIP模拟38]
T1 a 入阵曲.枚举矩形上下界,之后从左到右扫一遍.用树状数组维护前缀和加特判可以$A$,更保险要脸的做法是双指针扫,因为前缀和单调不减. $code:$ 1 #include<bits/st ...
- NOIP模拟 38
liu_runda的题! 错过辽QAQ T1虽然没用题解的损益法,但是用高精%还能过.. 没想到敲完就过编译了,还以为要调一天呢 高精度的阴影没了- T2的思路很巧妙 首先一个区间最多有一种颜色占一半 ...
- NOIP 模拟 $38\; \rm c$
题解 \(by\;zj\varphi\) 发现就是一棵树,但每条边都有多种不同的颜色,其实只需要保留随便三种颜色即可. 直接点分治,将询问离线,分成一端为重心,和两端都不为重心的情况. 每次只关心经过 ...
- NOIP 模拟 $38\; \rm b$
题解 \(by\;zj\varphi\) 考虑转化问题,将计算最大公约数换为枚举最大公约数. 设 \(sum_i\) 为最大公约数为 \(i\) 的方案数,可以容斥求解,\(sum_i=f_i-\su ...
- NOIP 模拟 $38\; \rm a$
题解 \(by\;zj\varphi\) 压行. 枚举两行,将中间的行压成一行,然后直接前缀和加二分. 注意边界细节问题. Code #include<bits/stdc++.h> #de ...
- noip模拟38
\(\color{white}{\mathbb{深秋总有廖落处,雁归每是菊败时,名之以:残菊}}\) 这场比赛几乎全场都在打暴力,几乎人均切掉的 \(t1\) 没有想到双指针,\(t3\) 的暴力也没 ...
- NOIP模拟38:a
这是T1. 考场上思路与正解就差个前缀,打的线段树,因为其巨大常数快乐挂掉...... 正解复杂度是\(O(n^2m)\),其实再挂个\(log\)也能过,但是需要用常数极其优秀的树状数组 ...
- NOIP模拟17.9.22
NOIP模拟17.9.22 前进![问题描述]数轴的原点上有一只青蛙.青蛙要跳到数轴上≥
随机推荐
- Python实用案例,Python脚本,Python实现批量加水印
往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 Python实现每日更换"必应图片"为"桌 ...
- 漫谈CUDA优化
作者:Lawliet 翻译:仿佛若有光 前言: 几个月前,我根据 Simoncelli 2016 年的论文编写了自己的自动编码器,用于研究目的.一开始,我想使用一些流行的深度学习框架(例如 Ten ...
- user-agent浏览器标识集合
user_agent_list = [ "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET ...
- SQL Server截取字符串(经纬度)
DECLARE @var VARCHAR(50) SET @var ='116.404556|39.915156' 方式一: SELECT CASE WHEN ISNULL(@var,'') < ...
- 【NLP学习其四】如何构建自己用于训练的数据集?什么是词性标注?
数据集与词性标注 数据集是NLP中的重要一环. 但是提到数据集,很多人的第一个想法可能是:"这玩意从网上下载就好了,不用管". 真的不用管?最开始我也是这么认为的 于是我直奔CoN ...
- jdk的下载与安装教程
最近在学逆向,就是要反编译人家的java代码,在这之前要先安装环境,下面是下载和安装JDK的教程: 1.JDK下载地址: http://www.oracle.com/technetwork/java/ ...
- AndroidStudio快捷键总结
本文总结一下最近常用的命令: 1.格式化代码:Ctrl+Alt+L[可能与电脑快捷键冲突,修改方法:在设置里点击Keymap 搜索:Reformat Code] 2.复制当前类:Ctrl+Shift+ ...
- k8s强制删除资源
一般强制删除 kubernetes 的资源: kubectl delete <resource> <resourename> --grace-period=0 --force ...
- 离线webpack创建vue 项目
参考地址: https://blog.csdn.net/feinifi/article/details/104578546 画重点: // 需要带上参数--offline表示离线初始化. --offl ...
- Bugku-login1(SKCTF)(SQL约束攻击)
原因 sql语句中insert和select对长度和空格的处理方式差异造成漏洞. select对参数后面的空格的处理方式是删除,insert只是取规定的最大长度的字符串. 逻辑 1.用 select ...