题解:【YACS 2022年 1 月月赛 丙组】 平衡括号

512 字
3 分钟
题解:【YACS 2022年 1 月月赛 丙组】 平衡括号
提供一种快速做法(31ms)~
首先,枚举是必须的,但是可以快速枚举。
优化 1: 众所周知 ,所以我们只需要枚举 就好了。
优化 2: 最大也只用到 ,因为分析样例解释发现以后的都是重复的,只是换了个顺序而已,算 遍即可。
优化 3: 可以从 开始枚举,因为再小了最大公因数就没有 了。
优化 4:每次可以加 ,因为余数有可加性,,所以能够保证最大公约数不低于 。
优化 5:,所以 时就不用枚举了。
结束~ 个 dir 啊
因为出事儿了……
下面这组数据阁下又该如何应对?
100 100寄~
因为 的值若是整数按照刚才的逻辑会被算 遍,然鹅换了个顺序还是这俩,不能重复计算啊!特判一下就得了……
ACCode:
// Problem: P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题// Contest: Luogu// URL: https://www.luogu.com.cn/problem/P1029// Memory Limit: 125 MB// Time Limit: 1000 ms//// Powered by CP Editor (https://cpeditor.org)
/*Code by Block_Fish*/#include <bits/stdc++.h>
#define log printf#define EPS 1e-8#define INF 0x3f3f3f3f#define FOR(i, l, r) for (int(i) = (l); (i) <= (r); ++(i))#define IOS \ ios::sync_with_stdio(false); \ cin.tie(nullptr); \ cout.tie(nullptr);
using namespace std;
typedef __int128 i128;typedef long long ll;typedef pair<int, int> PII;
int x, y, ans;
template <typename T>
inline T read() { T sum = 0, fl = 1; char ch = getchar(); for (; !isdigit(ch); ch = getchar()) if (ch == '-') fl = -1; for (; isdigit(ch); ch = getchar()) sum = sum * 10 + ch - '0'; return sum * fl;}
template <typename T>
inline void write(T x) { if (x < 0) { putchar('-'), write<T>(-x); return; } static T sta[35]; int top = 0; do { sta[top++] = x % 10, x /= 10; } while (x); while (top) putchar(sta[--top] + 48);}
int main() { x = read<int>(), y = read<int>(); for (int i = x; i * i <= x * y && i < y >> 1; i += x) if (!(x * y % i) && gcd(i, x * y / i) == x) ans += 2; if (x == y) ans = 1; write<int>(ans); return 0;}理解万岁!
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
题解:【YACS 2022年 1 月月赛 丙组】 平衡括号
https://www.leo2011.eu.org/posts/luogu-p1029/相关文章智能推荐
1
题解:【YACS 2022年 1 月月赛 丙组】 平衡括号
题解【YACS 2022年 1 月月赛 丙组】 平衡括号植树造林 的题解。
2
题解:P16007 [CCO 2016 Day 1] Field Trip 郊游
题解讲解了如何解决洛谷 P16007。
3
题解:P5691 [NOI2001] 方程的解数
题解洛谷 P5691【NOI 2001】方程的解数一题的题解,使用折半搜索。
4
题解:P1001 A+B Problem
题解给出了解决洛谷 P1001 A+B Problem 的「宏孩儿」解法。
5
题解:P10815 【模板】快速读入
题解讲解了如何实现快速读入。
随机文章随机推荐













