zoukankan      html  css  js  c++  java
  • 10682 deathgod想知道的事(数论)

    10682 deathgod想知道的事

    该题有题解

    时间限制:1000MS  内存限制:65535K
    提交次数:265 通过次数:14

    题型: 编程题   语言: G++;GCC

     

    Description

        一只蚂蚁从衣服地图上爬过留下痕迹,deathgod看到后在地图上建了个坐标,将蚂蚁留下的痕迹分成多条线段首位相连而成,
    且那些线段的端点都是整数点,现在他想知道这只蚂蚁经过了坐标中多少个整数点。




    输入格式

        第一行输入一个整数t,表示case数;对于每个case,第一行输入一个整数n(0<=n<=10),代表蚂蚁经过的线段的数量,
    接下来n+1行,每行有两个整数x,y(-10000<=x,y<=10000),表示蚂蚁依次经过线段的端点。



    输出格式

    每个case输出一行,蚂蚁所经过的整数点数量。



     

    输入样例

    1
    3
    0 0
    0 4
    2 2
    2 0
    



     

    输出样例

    9



    题解

    计算两个点之前有多少个整数点,只要算gcd(abs(x1-x2),abs(y1-y2))就行了。
    然后利用这个算出这两个点之间整数点的坐标。
    然后丢进set里面,去重。
    最后输出set的个数。

    具体看代码

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    #include <set>
    
    using namespace std;
    int gcd(int a ,int b)
    {
        return b>0?gcd(b,a%b):a;
    }
    int main()
    {
        int T;
        scanf("%d",&T);
        while (T--)
        {
            set <pair<int,int> > S;
            int n;
            scanf("%d",&n);
            int a,b,c,d;
            if (n)
            {
                scanf("%d%d",&a,&b);
                S.insert(make_pair(a,b));
            }
            for (int i=0;i<n;i++)
            {
                scanf("%d%d",&c,&d);
                int GCD=gcd(abs(c-a),abs(d-b));
                int len1=0,len2=0;
                if (GCD)
                len1=(c-a)/GCD,len2=(d-b)/GCD;
                for (int j=1;j<=GCD;j++)
                {
                    S.insert(make_pair(a+j*len1,b+j*len2));
                    //cout<<"经过的点 :"<<a+j*len1<<" "<<b+j*len2<<endl;
                }
                a=c,b=d;
            }
            printf("%d
    ",S.size());
        }
        return 0;
    }
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • 相关阅读:
    解决 Windows 下的 :所选择的任务“{0}”不再存在。若要查看当前任务,请单击“刷新”。
    学习编译更好的 DAO 的技巧
    宇宙的起源演讲全文(斯蒂芬·霍金)
    java對象序列化的兩種使用方法
    Ubuntu硬盘安装与配置(3D效果)
    java異常處理
    [zt]JDBC对数据库的事务操作
    [zt]spring本地事务与JTA事务实现解析
    Debian溫習
    在oracle中增大session數量
  • 原文地址:https://www.cnblogs.com/scaugsh/p/5589361.html
Copyright © 2011-2022 走看看