[SDOI] 仪仗队
SDOI仪仗队
序
迎面冷风袭来
我又该何去何从
哪里
是我的安居之处
正文
我们这个题有一个是很显然的想法,我们可以想到是跟 \(\gcd\) 有关,事实上没有任何分析的,我们就可以得到36分的高分
注意点如下:
- 从 0-n-1 编号,特判 i=0 的时候
- 对于一个点 (i,j) 其中 i,j>0 我们当且仅当 \(gcd(i,j)=1\)时,这个点是看得到的,你可以认为是一个正比例函数
之后,检查每一个点,判断其 \(\gcd(i,j)=1\) 的是否,记录答案,这样只能拿27pts,但是已经不错了,重要的是,我们可以只检查一半的点就好了,剩下的一半乘二即可,这是一个常数的优化
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n,ans;
int gcd(int a,int b){
if(a<b) return gcd(b,a);
if(a%b==0) return b;
return gcd(b,a%b);
}
int main(){
scanf("%d",&n);
if(n==1){printf("0");return 0;}
for(int i=0;i<n;i++){
if(i==0){
ans++;
continue;
}
for(int j=i+1;j<n;j++)
if(gcd(i,j)==1){
ans++;
}
}
ans=ans<<1;
ans++;
printf("%d",ans);
return 0;
}
我们这里使用欧几里得的算法
然后,我们来考虑正解。咋办?我们考虑一个东西
\[
\forall n,m \in N^+ , 若对于所有的 i \in [1,n],j \in [1,m],且 i,j有一个公约数是k,这样的i,j,有 \lfloor \frac{n}{k} \rfloor \times \lfloor \frac{m}{k} \rfloor 对
\]
而这个结论几乎是显然的,所以我们考虑容斥原理,只要求出所有的公约数,然后一减就好了
当然了,我们令 \(f[i]\) 为最大公约数是 i 的对数,当然了,这就要减一个后面 i 的倍数的 f ,最后 \(f[1]\) 即为所求
所以,我们可以得到,一个算法时间复杂度为 \(O(n \log n)\)
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int Maxn=44000;
int n,f[Maxn],ans;
int main(){
scanf("%d",&n);
if(n==1){printf("0");return 0;}
n--;
ans=n*n;
for(int i=n;i>=2;i--){
int tmp=(n/i)*(n/i);
for(int k=2;k<=n/i;k++){
tmp-=f[k*i];
}
f[i]=tmp;
ans-=f[i];
}
printf("%d",ans+2);
return 0;
}
但是因为没有算 0 行 0 列的两个,所以答案加二
嵬
我还是
回到,一横一竖的生活
[SDOI] 仪仗队的更多相关文章
- luogu2658 GCD(莫比乌斯反演/欧拉函数)
link 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 1<=N<=10^7 (1)莫比乌斯反演法 发现就是YY的GCD,左转YY的GCD ...
- [SDOI 2008]仪仗队
Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是 ...
- 【BZOJ 2190】【SDOI 2008】仪仗队 欧拉筛
欧拉筛模板题 #include<cstdio> using namespace std; const int N=40003; int num=0,prime[N],phi[N]; boo ...
- 【SDOI 2008】 仪仗队
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2190 [算法] 同POJ3090 值得注意的是此题数据规模较大,建议使用用线性筛筛出 ...
- BZOJ 2190 SDOI 2008 仪仗队 线性欧拉筛
标题效果:有一个格子组件图,假设三个人在一条直线上,那么第一个人将不会看到第三人.现在,有一个人站在(1,1)在.我问他是否能看到n*n的人数的矩阵. 思考:如果你想站(1,1)这名男子看到了一个立场 ...
- 洛谷P2158 [SDOI2008]仪仗队
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
- BZOJ 2190: [SDOI2008]仪仗队
2190: [SDOI2008]仪仗队 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2689 Solved: 1713[Submit][Statu ...
- 【BZOJ2190】【SDOI2008】仪仗队
Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是 ...
- BZOJ2190: [SDOI2008]仪仗队
Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是 ...
随机推荐
- Redis搭建哨兵模式
一 安装Redis 1. 从https://redis.io/download redis官网下载二进制包安装 例如:wget http://download.redis.io/releases/re ...
- Android Studio中Gradle sync failed
问题:Android Studio中更新同步Gradle 失败 Gradle sync failed: Could not find com.android.tools.build:gradle:3. ...
- 21种JavaScript设计模式最新记录(含图和示例)
最近观看了<Javascript设计模式系统讲解与应用>教程,对设计模式有了新的认识,特在此做些记录. 一.UML 文中会涉及众多的UML类图,在开篇需要做点基础概念的认识.以下面的图为例 ...
- java上传组件commons-fileupload的一些使用方法
在 http://www.apache.org,下载commons-fileupload-1.2.1.jar包,并把这个包加到工程中,以下是记录这个上传组件的一些使用方法. html测试页面,实现上传 ...
- 【科创人独家】科界CTO林镇南:言必真,行必果,没有尽力而为,只有全力以赴
B2C-->B2B-->O2O-->B2G.从传统电商到电子商务,再到最火医美,最后转入国企,80末的林镇南成长路径有特点:行业跨度大.技能涉猎广.误以为"4点半下班&qu ...
- Codeforces_708_A
http://codeforces.com/problemset/problem/708/A 贪心,先把前面连续的一串'a'排除,再向后知道找到第一个'a',注意特殊情况. #include<i ...
- Codeforces 1011C Fly(二分+模拟)
题意: 是有n个星球,1代表地球,然后输入一个m表示火箭的重量,然后输入了两组n个数,第一组表示在每个星球起飞时消耗一吨燃料的质量数,a[i]就表示每a[i]吨就要消耗1吨燃料,第二组就表示在每个星球 ...
- bootstrap 图片类 和 按钮类 部分
bootstrap框架,来自 Twitter,基于 html ,css ,js.简介灵活. 首先引入 bootstrap.js bootstrap.css 及 jquery.js 这里不考虑 ...
- 深入理解JVM(二)--垃圾收集算法
一. 概述 说起垃圾收集(Garbage Collection, GC), 大部分人都把这项技术当做Java语言的伴随生产物. 事实上, GC的历史远远比Java久远, 1960年 诞生于MIT的Li ...
- T1飞跃树林 && 【最长等差子序列】
solution by Mr.gtf 一道简单的递推 首先我们对树高从大到小排序 很容易得到递推式 ans[i]=Σans[j] (j<i && h[j]-h[i]<=K) ...