码迷,mamicode.com
首页 > 其他好文 > 详细

Gym - 101845E (图形转换思维)

时间:2019-08-30 20:54:34      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:图片   image   space   def   namespace   ack   技术   size   pac   

题意:给你个边长为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 (图形转换思维)

标签:图片   image   space   def   namespace   ack   技术   size   pac   

原文地址:https://www.cnblogs.com/philo-zhou/p/11436842.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!