zoukankan      html  css  js  c++  java
  • CodeForces 599D Spongebob and Squares

    先推导出公式x*(x+1)(3*y-x+1)=6*n,然后枚举求解。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    vector<long long >ansx,ansy;
    long long n;
    
    int main()
    {
        while(~scanf("%lld",&n)){
            ansx.clear();
            ansy.clear();
        for(long long x=1;;x++)
        {
            long long A=x*(x+1);
            long long B=6*n/A;
            long long y=(B+x-1)/3;
            if(y<x) break;
            if((6*n)%A!=0) continue;
            if((B+x-1)%3!=0) continue;
            ansx.push_back(x);
            ansy.push_back(y);
    
        }
    
        int u;
        if(ansx[ansx.size()-1]==ansy[ansx.size()-1])
            u=2*ansx.size()-1;
        else u=2*ansx.size();
        printf("%d
    ",u);
        for(int i=0;i<ansx.size();i++)
        {
            printf("%lld %lld
    ",ansx[i],ansy[i]);
        }
        for(int i=ansx.size()-1;i>=0;i--)
        {
            if(ansy[i]==ansx[i]) continue;
            printf("%lld %lld
    ",ansy[i],ansx[i]);
        }
        }
        //x*(x+1)(3*y-x+1)=6*n
        return 0;
    }
  • 相关阅读:
    函数进阶-生成器
    函数进阶-列表生成式
    闭包
    命名空间
    内置方法
    函数
    squid清除缓存
    subprocess实现管道
    Python统计脚本行数(fileinput)
    fabric note
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5469129.html
Copyright © 2011-2022 走看看