「SCOI2011」飞镖
一、前言
[和谐美好]选择结构题
二、题解
一眼做法,枚举系数,然后解线性方程。
然后就贼[和谐美好]难打。
先考虑三个飞镖都扔完
第一个 { } \{ \} {} 里的东西是系数序列,第二个 { } \{ \} {} 里的东西是自变量上确界序列(下确界都是 1 1 1)
case 1: 只有一种系数,且一定有一个 2 m 2m 2m。
{ 2 m , i , i } \{ 2m, i, i \} {2m,i,i} { 1 , k , k } \{ 1, k, k \} {1,k,k}
case 2: 只有两种系数,且一定有一个 2 m 2m 2m
{ 2 m , i , j } \{ 2m, i, j \} {2m,i,j} { 1 , k , k } \{ 1, k, k \} {1,k,k}
case 3: 只有两种系数,且一定没有 2 m 2m 2m
{ i , 2 , 2 } \{ i, 2, 2 \} {i,2,2} { k , k , k } \{ k, k, k \} {k,k,k}
{ i , i , 2 } \{ i, i, 2 \} {i,i,2} { k , k , k } \{ k, k, k \} {k,k,k}
case 4: 有三种系数
{ 1 , 2 , 3 } \{ 1, 2, 3 \} {1,2,3} { k , k , k } \{ k, k, k \} {k,k,k}
case 5: 一种系数都没有
{ m , m , m } \{ m, m, m \} {m,m,m} { 2 , 2 , 2 } \{ 2,2,2 \} {2,2,2} (第一个变量的系数强制为 2 2 2)
{ m , m , m } \{ m, m, m \} {m,m,m} { 0 , 0 , 0 } \{ 0,0,0 \} {0,0,0}
对于 C a s e 1 — 3 Case 1—3 Case1—3,我们相当于解一个类似于如下的线性方程。 a x + b y = c ax + by = c ax+by=c
我们可以写出它的通解
{ x = x 0 + b g c d ( a , b ) k y = y 0 − a g c d ( a , b ) k \begin{cases} x = x_0 + \frac{b}{gcd (a, b)}k \\ y = y_0 - \frac{a}{gcd (a, b)}k \end{cases} {x=x0+gcd(a,b)bky=y0−gcd(a,b)ak
ps: x 0 , y 0 x_0,y_0 x0,y0 表示一组满足要求的特殊解。
这时我们相当于要找一组解,满足 x ∈ [ l 1 , r 1 ] , y ∈ [ l 2 , r 2 ] x \in [l_1, r_1], y \in [l_2, r_2] x∈[l1,r1],y∈[l2,r2]。
由于只是判断存在性,我们只需要枚举 x x x 满足要求的最大和最小值,算出对应的 y y y 的值,判断是否在区间内,然后交换 x , y x,y x,y 和定义域区间,再判断一下,只要有一个满足就说明有解。
对于 C a s e 4 Case4 Case4 我们只需要满足 x ∈ [ 2 , 6 k ] x \in [2, 6k] x∈[2,6k] 即可。
对于 C a s e 5 Case5 Case5 我们直接特判
为了代码简洁,投掷次数不足三次的就多传了一个参(标记是否允许等于零),如果能理清枚举思路的话还好,如果没有理清那么我的代码可能就失去了可读性……
三、参考代码
#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL long long
#define rep(i,j,k) for (int i = (j); i <= (k); i++)
#define per(i,j,k) for (int i = (j); i >= (k); i--)template <typename T>
void read (T &x) {x = 0;T f = 1; char ch = getchar ();while (ch < '0' || ch > '9') {if (ch == '-') f = -1;ch = getchar ();}while (ch >= '0' && ch <= '9') {x = (x << 3) + (x << 1) + ch - '0';ch = getchar ();}x *= f;
}
template <typename T, typename... Args>
void read (T &x, Args&... args) {read (x); read (args...);
}
template <typename T> T Max (T x, T y) { return x > y ? x : y; }
template <typename T> T Min (T x, T y) { return x < y ? x : y; }
template <typename T> T Abs (T x) { return (x > 0 ? x : -x); }LL exgcd (LL a, LL b, LL &x, LL &y) {if (b == 0) {x = 1, y = 0;return a;}LL res = exgcd (b, a % b, y, x);y -= (a / b) * x;return res;
}const int Maxn = 3;
const int Maxm = 5;int t;
LL a[Maxn + 5][Maxm + 5];LL x[Maxm + 5][Maxm + 5], y[Maxm + 5][Maxm + 5], _gcd[Maxm + 5][Maxm + 5];bool check (LL Limit, LL k1, LL x1, LL X, bool zero1) {if (X % k1) return 0;X /= k1;LL l, r;if (zero1) l = 0;else l = x1;r = x1 * Limit;if (l <= X && X <= r) return 1;else return 0;
}
bool judge (LL X, LL Y, LL DX, LL DY, LL num, LL l1, LL r1, LL l2, LL r2) {X += DX * num, Y -= DY * num;return (l1 <= X && X <= r1) && (l2 <= Y && Y <= r2);
}
bool check (LL Limit, LL k1, LL x1, LL k2, LL x2, LL X, bool zero1, bool zero2) {LL l1 = x1, r1 = x1 * Limit, l2 = x2, r2 = x2 * Limit;if (zero1) l1 = 0;if (zero2) l2 = 0;if (X % _gcd[k1][k2]) return 0;LL f = x[k1][k2] * (X / _gcd[k1][k2]), s = y[k1][k2] * (X / _gcd[k1][k2]);LL df = k2, ds = k1;bool fl = judge (f, s, df, ds, ceil ((l1 - f) * 1.0 / df), l1, r1, l2, r2) | judge (f, s, df, ds, floor ((r1 - f) * 1.0 / df), l1, r1, l2, r2);swap (f, s);swap (df, ds);swap (l1, l2);swap (r1, r2);fl |= judge (f, s, df, ds, ceil ((l1 - f) * 1.0 / df), l1, r1, l2, r2) | judge (f, s, df, ds, floor ((r1 - f) * 1.0 / df), l1, r1, l2, r2);return fl;
}
bool check_three (LL Limit, LL x) {return 2 <= x && x <= 2 * Limit + 3 * Limit + Limit;
}signed main () {read (t);rep (i, 1, 3)rep (j, 1, 5)read (a[i][j]);rep (i, 1, 3)rep (j, 1, 3)_gcd[i][j] = exgcd (i, j, x[i][j], y[i][j]);int cnt = 0;rep (step, 1, t) {LL k = a[1][5], m = a[2][5], x = a[3][5];rep (i, 1, 3) a[i][5] = ((a[i][1] * a[i][5] % a[i][4] * a[i][5] % a[i][4] + a[i][2] * a[i][5] % a[i][4] + a[i][3]) % a[i][4]) + 20;bool fl = 0;rep (i, 1, 3) {if (check (k, i, 2, x - 2 * m, 1)) fl = 1;if (check (k, i, 1, x - 2 * m - m, 1)) fl = 1;if (check (k, i, 1, x - 2 * m - 2 * m, 1)) fl = 1;}rep (i, 1, 3)rep (j, 1, 3) {if (check (k, i, 1, j, 1, x - 2 * m, 1, 1)) fl = 1;}rep (i, 1, 3) {if (check (k, i, 1, 2, 2, x, 1, 0)) fl = 1;if (check (k, i, 2, 2, 1, x, 1, 0)) fl = 1;if (check (k, i, 1, 2, 1, x - m, 1, 0)) fl = 1;if (check (k, i, 1, 2, 1, x - 2 * m, 1, 1)) fl = 1;}if (check_three (k, x)) fl = 1;if (((2 <= x / m && x / m <= 6) || (x / m == 0)) && x % m == 0) fl = 1;cnt += fl;}cout << cnt;return 0;
}
讲道理,真的卡常 (虽然只是我的[和谐美好]做法)
「SCOI2011」飞镖相关推荐
- 「SCOI2011」棘手的操作
传送门 Description 有\(N\)个节点,标号从\(1\)到\(N\),这\(N\)个节点一开始相互不连通.第$ i\(个节点的初始权值为\)a_i$ ,接下来有如下一些操作: U x y ...
- 自动驾驶落地,究竟被什么「绑」住了脚?
编译 | 高静宜 项文虎 邱陆陆 来源 | wired 自动驾驶汽车的行驶范围将不再局限于测试跑道或是平静的郊区街道,它们出现在美国的纽约.旧金山以及匹兹堡等地,参与到真实世界的交通中去,也进驻欧洲. ...
- 如何直观地理解「协方差矩阵」?
如何直观地理解「协方差矩阵」? Xinyu Chen Urban Traffic Data Analytics 372 人赞同了该文章 协方差矩阵在统计学和机器学习中随处可见,一般而言,可视作方差和协 ...
- 消除左递归实验代码_「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!
构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树 ...
- 不带头节点的链表有哪些缺点_23张图!万字详解「链表」,从小白到大佬!
链表和数组是数据类型中两个重要又常用的基础数据类型. 数组是连续存储在内存中的数据结构,因此它的优势是可以通过下标迅速的找到元素的位置,而它的缺点则是在插入和删除元素时会导致大量元素的被迫移动,为了解 ...
- 一位老码农的分享:一线程序员该如何面对「中年危机」?
如果这是第二次看到我的文章,欢迎文末扫码订阅我个人的公众号(跨界架构师)哟~ 本文长度为2728字,建议阅读8分钟. 坚持原创,每一篇都是用心之作- 先来聊一下这个问题的背景吧. 前两天有小伙伴问 ...
- 机器人 Ameca「苏醒」瞬间逼真到令人恐惧,网友纷纷惊叹……
整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 近日,国内外网友都被一段机器人「苏醒」的视频惊讶到. 视频开始时,机器人似乎已经睡着,眼睛闭着,头部略微向下倾斜.随着肩膀的伸展 ...
- AI 复活「她」! GPT-3 帮美国小哥复刻逝去未婚妻,但又夺走她……
整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 今年 7 月,一名33岁的美国小哥 Joshua Barbeau 在未婚妻去世后,根据她在 Facebook 和 twitter ...
- OpenAI 以 10 亿美元出售「灵魂」,网友热评不再「Open」
编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) OpenAI 如何以 10 亿美元的价格出售其灵魂:GPT-3 和 Codex 背后的公司并不像它声称的那样开放. 当金钱成为障 ...
最新文章
- 工作占用了太多私人时间_职晓|如果工作占用了生活时间,我应不应该辞职?...
- 函数式编程 lambda表达式
- tcp unity 图片_用 Unity 做个游戏(七) - TCP Socket 客户端
- 剑指 Offer 32 - I. 从上到下打印二叉树
- C Builder中如何利用消息
- java 蓝桥杯算法训练 求1加到x的和(number)
- fatal: Not a git repository (or any parent up to mount point /home) Stopping at filesystem boundary
- word打开文档很久很慢_解决直接打开Word、Excel文档很慢,而通过先打开WORD、EXCEL程序再打开文档则很快的问题...
- 本人github网址:https://github.com/HuaAndLi
- 2018蓝桥杯 航班时间和乘积尾零
- 皮特测评:蓝牙耳机哪个品牌最好?300元内最好的蓝牙耳机
- 计算机相关缩略语,计算机缩略语精选
- Photoshop CC 2017 在Mac上安装报错解决办法
- html中tabindex属性是啥意思
- 汉诺塔递归的c语言实现(递归)
- 产品06-流程图与结构图
- ST-GCN demo运行记录
- linux du | sort 命令查找磁盘占用大户
- SD客户信用值(信贷限额、应收款	预收账款、销售值、信贷风险总额、可用余额)
- unity生成 html5,导出到html5时发生unity项目错误