Gym - 101845E (图形转换思维)
Posted philo-zhou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gym - 101845E (图形转换思维)相关的知识,希望对你有一定的参考价值。
题意:给你个边长为n(1 <= n <= 50)的下图这种三角形,图形所有点构成集合。找多少对a,b满足条件,条件为:ab两点之间还有其他点。
题解:刚开始以为直接找规律就行,wa了两次发现可能会有斜着的。后来又想暴力跑一下就行了,但是坐标是double的怎么跑?然后发现转化成直的就行了。至于为什么想成这种,也说不清,这样画出来发现他们的性质确实一样,以后看见这图形记住好点,这种性质一个样。
然后枚举每两个点,求坐标差的gcd,如果大于1,则满足。这个为什么呢?在纸上画一下就知道,gcd表示的是以ab为顶点的线段可以被整分为gcd份。因为我们所有书都是整数。
#include <bits/stdc++.h> #define FOR(a, b, c) for(int a = b; a <= c; a++) #define met(a, b) memset(a, b, sizeof(a)) #define mp make_pair using namespace std; typedef long long ll; vector<pair<int, int> >q; int main() int n; cin >> n; for(int i = 0; i <= n; i++) for(int j = 0; j <= i; j++) q.push_back(mp(i, j)); int tot = 0; for(int i = 0; i < q.size(); i++) for(int j = i+1; j < q.size(); j++) int x = abs(q[i].first - q[j].first); int y = abs(q[i].second - q[j].second); if(__gcd(x, y) > 1) tot++; cout << tot << endl; return 0;
以上是关于Gym - 101845E (图形转换思维)的主要内容,如果未能解决你的问题,请参考以下文章