[SDOI2008] 仪仗队【题解】
题目描述
作为体育委员,C 君负责这次运动会仪仗队的训练。仪仗队是由学生组成的 \(N \times N\) 的方阵,为了保证队伍在行进中整齐划一,C 君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。

现在,C 君希望你告诉他队伍整齐时能看到的学生人数。
思路
题目给出一个 \(n \times n\) 的点阵,对于这个点阵,我们从左下角到右上角画一条斜线,分离左上部分和右下部分。
然后我们可以发现这个点阵是根据这条对角线对称的。
对于这条对角线,我们从右上角开始,对其经过的点依次进行标号。
最后发现有 n 个点。
第 1 个和第 n 个处于最角上(其中一个还是自己),不可能看到。
对于对角线上剩下的点依次进行分析。
我们已知这条线上的点是看不到的(坐标点右上角那一个点除外,单独分析)。
· · · · · 1
· · · · 2 ·
· · · 3 · ·
· · 4 · · ·
· 5 · · · ·
6 · · · · ·
我们可以发现,其中一部分与该编号的点是可以看到的点。
因此,最终是求 2 到 n-1 互质的个数。
Code
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#define MAXN 40500
using namespace std;
int prime[MAXN],cnt,phi[MAXN];
bool isprime[MAXN];
void eular()// 线性筛求欧拉函数
{
for(int i = 1;i <= MAXN; i++)
isprime[i] = 1;
isprime[1] = 0;
phi[1] = 1;
for(int i = 2;i <= MAXN; i++)
{
if( isprime[i] )
{
prime[++cnt] = i;
phi[i] = i - 1;
}
for(int j = 1;j <= cnt and i*prime[j] <= MAXN; j++)
{
isprime[i*prime[j]] = 0;
if( i%prime[j] != 0 )
phi[i*prime[j]] = phi[i] * phi[prime[j]];
else
{
phi[i*prime[j]] = phi[i] * prime[j];
break;
}
}
}
}
int main()
{
int n;
cin >> n;
eular();
int sum = 0;
for(int i = 2;i < n; i++)
sum += phi[i];
cout << sum*2 + 3;
return 0;
}
[SDOI2008] 仪仗队【题解】的更多相关文章
- 欧拉函数 || [SDOI2008]仪仗队 || BZOJ 2190 || Luogu P2158
题面:P2158 [SDOI2008]仪仗队 题解: 显然除了(1,1),(0,1),(1,0)三个点外,对于其他点(x,y)只要满足gcd(x,y)==1就可以被看到 然后这些点是关于y=x对称的, ...
- [SDOI2008]仪仗队
P2158 [SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线 ...
- [SDOI2008]仪仗队 (洛谷P2158)
洛谷题目链接:[SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视 ...
- 【bzoj2190】[SDOI2008]仪仗队
2190: [SDOI2008]仪仗队 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2638 Solved: 1674[Submit][Statu ...
- bzoj2190: [SDOI2008]仪仗队(欧拉)
2190: [SDOI2008]仪仗队 题目:传送门 题解: 跟着企鹅大佬做题! 自己瞎搞搞就OK,不难发现,如果以C作为原点建立平面直角坐标系,那么在这个坐标系中,坐标为(x,y)且GCD(x,y) ...
- BZOJ 2190: [SDOI2008]仪仗队
2190: [SDOI2008]仪仗队 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2689 Solved: 1713[Submit][Statu ...
- BZOJ 2190: [SDOI2008]仪仗队( 欧拉函数 )
假设C君为(0, 0), 则右上方为(n - 1, n - 1). 一个点(x, y) 能被看到的前提是gcd(x, y) = 1, 所以 answer = ∑ phi(i) * 2 + 2 - 1 ...
- P2158 [SDOI2008]仪仗队
P2158 [SDOI2008]仪仗队图是关于y=x对称的,横纵坐标一定是互质的否则在之前就被扫过了,所以就可以用欧拉函数再*2就完了. #include<iostream> #inclu ...
- 洛谷 P2158 [SDOI2008]仪仗队 解题报告
P2158 [SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线 ...
- P2158/bzoj2190 [SDOI2008]仪仗队
P2158 [SDOI2008]仪仗队 欧拉函数 计算下三角的点数再*2+1 观察斜率,自行体会 #include<iostream> #include<cstdio> #in ...
随机推荐
- CS144 计算机网络 Lab0:Networking Warmup
前言 本科期间修读了<计算机网络>课程,但是课上布置的作业比较简单,只是分析了一下 Wireshark 抓包的结构,没有动手实现过协议.所以最近在哔哩大学在线学习了斯坦福大学的 CS144 ...
- [Pytorch框架] 3.3 通过Sin预测Cos
文章目录 3.3 通过Sin预测Cos 3.3 通过Sin预测Cos %matplotlib inline import torch import torch.nn as nn from torch. ...
- [C++核心编程] 2、引用
文章目录 2 引用 2.1 引用的基本使用 2.2 引用注意事项 2.3 引用做函数参数 2.4 引用做函数返回值 2.5 引用的本质 2.6 常量引用 2 引用 2.1 引用的基本使用 **作用: ...
- 关于在 springboot 中使用 @Autowired 注解来对 TemplateEngine 进行自动装配时,无法注入的问题。
前言 本文是基于江南一点雨的 Spring Boot+Vue 系列视频教程第 三 章的第三节,详情参考Spring Boot+Vue系列视频教程 在观看学习这一节时,发现当进行手动渲染 Thymele ...
- JavaWeb之04javaScript基础&DOM目录
目录: 1.案例:在末尾添加节点(*****) ** 创建标签 createElement方法 ** 创建文本 createTextNode方法 ** 把文本添加到标签下面 appendChild方法 ...
- js数组和字符串方法
一.数组方法 1.1.可以改变原数组 var arr = [10, 20, 30, 40, 50, 55]; // 1. **** push() --- 在数组的最后添加一项内容 // var ret ...
- 2022-02-22:机器人大冒险。 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0)。小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动。指令有两种
2022-02-22:机器人大冒险. 力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0).小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动.指令有两种 ...
- 2021-11-28:有一棵树,给定头节点h,和结构数组m,下标0弃而不用。 比如h = 1, m = [ [] , [2,3], [4], [5,6], [], [], []]
2021-11-28:有一棵树,给定头节点h,和结构数组m,下标0弃而不用. 比如h = 1, m = [ [] , [2,3], [4], [5,6], [], [], []], 表示1的孩子是2. ...
- 2021-09-01:三数之和。给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
2021-09-01:三数之和.给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组. ...
- JavaScript原型与原型链深入理解
原型: 每一个js 对象(null除外)都会和另一个对象相关联,"另一个"对象就被我们称之为'原型', 而每一个原型拥有一个prototype 属性指向原型对象(就是原型的实例)的 ...