zoukankan      html  css  js  c++  java
  • BZOJ 1041 圆上的整点

    最开始的时候想用暴力的思路,从-R搜到R,后来一看数据,毁了数据太大。接着想到优化,圆加坐标可以抽象的分解为全等的八块,因此只需求从二分之根号二R到R的整点中符合要求的,但是依然超时了,后来仔细分析了一下后发现,这根本就是一道数学题,详解如下:

    20130818133251390

    根据上述描述得到程序如下:

    #include<cstdio>
    #include<set>
    #include<utility>
    #include<cmath>
     
    using namespace std;
     
    set<pair<int,int> > s;
    long long int r; 
     
    void search(int x,int y)
    {
        if(x%4!=1) return;
     
        int sx=sqrt(x/2);
        for(int i=1;i<=sx;i++)
        {
            int t=sqrt(x-i*i);
            if(t*t==x-i*i)
            {
                int tx=t*t-i*i,ty=2*t*i;
                if(tx>0)
                {
                    if(tx<ty)
                    {
                        int tmp=tx;tx=ty;ty=tmp;
                    }
                    s.insert(make_pair(tx*y,ty*y));
                }
            }
        }
    }
     
    int main()
    {
        scanf("%d",&r);
     
        int sr=sqrt(r);
     
        for(int i=1;i<=sr;i++)
        {
            if(!(r%i))
            {
                search(i,r/i);
                if(i*i!=r) search(r/i,i);
            }
        }
     
        printf("%d
    ",s.size()*8+4);
     
        return 0;
    }
    感谢各位的观看,希望能有所收获,谢谢。
  • 相关阅读:
    大端小端
    浅谈协程
    boost总结之any
    boost总结之variant
    STL总结之functor
    zabbix设置多个收件人
    zabbix设置发送消息的时间
    zabbix利用微信报警
    Windos无法验证文件数组签名
    zabbix基础安装
  • 原文地址:https://www.cnblogs.com/szy-wlxy/p/4690304.html
Copyright © 2011-2022 走看看