NOIP 模拟 $15\; \text{夜莺与玫瑰}$
题解
一道很妙的题,让求对于一个矩阵中,两点相连成线,有多少条直线,他们的交集是有限集。
转化一下题目,发现水平和竖直的只有 \(n+m\) 条,而左斜和右斜的条数是相同的,所以我们只需求出左或右中的即可
这个矩阵中一共有 \(\sum_{a=1}^{n-1}\sum_{b=1}^{m-1}[gcd(a,b)=1]\) 条斜率不同的直线,那么对于每一种斜率,又有 \((n-a)×(m-b)\) 个点
可以伸出来,但是会有重复的所以要减去 \((n-2×a)×(m-2×b)\)
所以最后可以推出来一个总式子
\]
\(60pts\) 到手
考虑如何优化它,这里提供一种 \(O(n)\) 查询的做法。
我们维护三个数组 \(\gcd\) \(\rm gnm\) \(\rm gsm\),\(\rm gnm_{i,j}\) 表示从 \(1~j\) 有多少个和 \(i\) 互质的数,\(\rm sum\) 表示就是这些数的和。
对于 \(\rm gcd\) 我们可以 \(n^2\) 预处理
查询时,我们枚举 \(a\),对于后边的式子,拆一下
\]
这个式子,根据我们维护的三个数组就可以求出来了。
Code
#include<bits/stdc++.h>
#define ri register int
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
template<typename T>inline void read(T &x) {
ri f=1;x=0;register char ch=gc();
while(ch<'0'||ch>'9') {if (ch=='-') f=0;ch=gc();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
x=f?x:-x;
}
}
using IO::read;
namespace nanfeng{
#define int unsigned int
#define cmax(x,y) ((x)>(y)?(x):(y))
#define cmin(x,y) ((x)>(y)?(y):(x))
#define FI FILE *IN
#define FO FILE *OUT
typedef long long ll;
static const int N=4e3+7,MOD=(1<<30)-1;
int gsm[N][N],T,ans,n,m;
short num[N][N],*gcd[N];
inline void init() {
ri n=N-7;
// int *(gcd[N])=new int[n+7];
gcd[0]=new short[n+7];
for (ri i(1);i<=n;p(i)) {
gcd[i]=new short[n+7];
gcd[i][i]=gcd[i][0]=gcd[0][i]=i;
// printf("i=%d\n",i);
for (ri j(1);j<i;p(j))
gcd[j][i]=gcd[i][j]=gcd[j][i%j];
}
delete gcd[0];
for (ri i(1);i<=n;p(i)) {
for (ri j(1);j<=n;p(j)) {
if (gcd[i][j]==1) gsm[i][j]=j,num[i][j]=1;
gsm[i][j]+=gsm[i][j-1];
num[i][j]+=num[i][j-1];
}
delete gcd[i];
}
}
inline int main() {
// FI=freopen("nanfeng.in","r",stdin);
// FO=freopen("nanfeng.out","w",stdout);
init();
read(T);
for (ri z(1);z<=T;p(z)) {
read(n),read(m);ans=0;
ri bs=n*m;
for (ri i(1);i<=n-1;p(i)) {
ans=(ans+(int)num[i][m-1]*(n-i)*m);
ans-=(n-i)*gsm[i][m-1];
if (i*2>=n) continue;
int lm=(m&1)?m/2:m/2-1;
ans-=(n-2*i)*(m*num[i][lm]-(gsm[i][lm]<<1));
}
printf("%u\n",(ans*2+n+m)&MOD);
}
return 0;
}
#undef int
}
int main() {return nanfeng::main();}
小技巧,这个模数很特殊,可以自然溢出,减少低效的取模
NOIP 模拟 $15\; \text{夜莺与玫瑰}$的更多相关文章
- NOIP 模拟 $15\; \text{影子}$
题解 \(by\;zj\varphi\) 一道并查集的题 对于它路径上点权,我们可以转化一下:对于一个点,它在哪些路径上是最小的点权 那么我们排个序,从大到小加入点,每回加入时,将这个点与它所相连的且 ...
- NOIP 模拟 $15\; \rm \text{玫瑰花精}$
题解 \(by\;zj\varphi\) 一道线段树题目 这道题可以通过维护一棵线段树,线段树上的每个节点维护 \(\rm l,r,len,p\) 分别表示这段区间最左边的花精,最右边的花精,被两只花 ...
- NOIP模拟 1
NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. # 用 户 名 ...
- 20190725 NOIP模拟8
今天起来就是虚的一批,然后7.15开始考试,整个前半个小时异常的困,然后一看题,T1一眼就看出了是KMP,但是完了,自己KMP的打法忘的一干二净,然后开始打T2,T2肝了一个tarjan点双就扔上去了 ...
- 2021.5.22 noip模拟1
这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照 ...
- Noip模拟15 2021.7.14
T1 夜莺与玫瑰 题目越发的变态起来... 这题刚开始看超级像仪仗队,好不容易码完欧拉函数后尝试×2后输出但不对!! 于是选择了跳过.... 正解居然是莫比乌斯函数....我也是醉了 预处理完就剩下$ ...
- noip第15课作业
1. 累加求和 给定n(1<=n<=100),用递归的方法计算1+2+3+4+5+......+(n-1)+n. 输入:一个大于等于1的整数. 输出:输出一个整数. [样例输入] 5 [样 ...
- NOIP模拟
1.要选一个{1,2,...n}的子集使得假如a和b在所选集合里且(a+b)/2∈{1,2,...n}那么(a+b)/2也在所选集合里 f[i]=2*f[i-1]-f[i-2]+g[i] g[n]:选 ...
- NOIP模拟3
期望得分:30+90+100=220 实际得分:30+0+10=40 T1智障错误:n*m是n行m列,硬是做成了m行n列 T2智障错误:读入三个数写了两个%d T3智障错误:数值相同不代表是同一个数 ...
随机推荐
- 什么是 Acunetix 目标知识库
随着Acunetix 的最新更新,我们引入了一个称为目标知识库的新功能.每次扫描目标时,Acunetix 都会收集并存储有关它的信息.此信息包括构成站点结构的路径.表单的位置及其输入.Web 应用程序 ...
- STM32中的通信协议
按照数据传送方式分: 串行通信(一条数据线.适合远距离传输)并行通信(多条数据线.成本高.抗干扰性差) 按照通信的数据同步方式分: 异步通信(以1个字符为1帧.发送与接收时钟不一致)同步通信(位同步. ...
- lua环境搭建
前言: Linux & Mac上安装 Lua 安装非常简单,只需要下载源码包并在终端解压编译即可,本文介绍Linux 系统上,lua5.3.0版本安装步骤: ↓ 1. Linux 系统上安装 ...
- STP概述简介及生成树算法
目录: STP概述 STP简介 生成树算法 选择根网桥 选择根端口 选择指定端口 BPDU(桥协议数据单元) STP利用BPDU选择根网桥 STP的收敛 VLAN与STP关系 MSTP多生成树协议华为 ...
- python 常用命令sys.exit()
Python的程序有两中退出方式:os._exit(), sys.exit() os._exit()会直接将python程序终止,之后的所有代码都不会继续执行. sys.exit()会引发一个异常:S ...
- 13、java——常用类
枚举类型 描述一种事物的所有情况|所有可能|所有实例 (1)通过enum关键字定义枚举类型 (2)枚举的成员,字段都作为当前枚举类型的实例存在,默认被public static final修 ...
- SQL注入:sqli-labs lesson-1 小白详解
为什么是小白详解?因为我就是小白 SQL注入早有耳闻,今天算是真正打开这个门了,但是想要跨进去应该还是没有那么容易. 在B站上听了40分钟的网课,老实说,他讲的还不错,第一遍听不懂也正常 https: ...
- js实现0ms延时定时器的几种方式
这两天看到一篇介绍<如何实现准时的 setTimeout?>的文章,文章起源于一道面试题:有什么办法让setTimeout准时呀?具体文章内容可查看附录[1],看完之后,引起了我对setT ...
- debug:am、cmd命令源码分析
debug:am.cmd命令源码分析 目录 debug:am.cmd命令源码分析 am命令的实现 手机里的am am.jar cmd命令的实现 手机里的cmd cmd activity cmd.cpp ...
- P3209-平面图判定
平面图 平面图就是所有点的连边不相交的图.(当然是在你尽量想让它不相交的情况下).这一点可以大概理解成拓扑图的性质,即每连一条边就会将某个区域进行分割--很明显,如果两个点分别处在两个不可达的区域,它 ...