ataraxia

窝只想一直陪着你~~

Codeforces Round #332 (Div. 2)D. Spongebob and Squares(数学方程,暴力)

题目链接
题意:给你一个数X问,n*m的矩形中,面积不同的正方形的个数和是X。输出所有的 n * m
解法:这里写图片描述
然后继续化简是6*x+n^3-n=(3 * n^2+3 * n) * m是关于m的函数,我们直接枚举n,就好了,注意上限,


#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define X first
#define Y second
#define cl(a,b) memset(a,b,sizeof(a))
typedef pair<long long ,long long > P;
const int maxn=100005;
const LL inf=1LL<<45;
const LL mod=1e9+7;
vector<P> ans;
int main(){
    LL x;scanf("%lld",&x);
    ans.pb(P(1,x/1));
    bool same=false;
    if(1==x/1)same=true;
    for(LL n=2;n<=10000000||n*n*n<=x;n++){
        LL a=6*x+n*n*n-n;
        LL b=3*n*n+3*n;
        if(a%b==0){
            if(n==a/b)same=true;
            if(n<=a/b)ans.pb(P(n,a/b));
        }
    }

    int N=2*ans.size();
    if(same)N-=1;
    printf("%d\n",N);
    for(int i=0;i<ans.size();i++){
        printf("%lld %lld\n",ans[i].X,ans[i].Y);
    }
     for(int i=ans.size()-1;i>=0;i--){
        if(ans[i].X!=ans[i].Y)printf("%lld %lld\n",ans[i].Y,ans[i].X);
    }
    return 0;
}


阅读更多
版权声明:学习笔记 https://blog.csdn.net/u013167299/article/details/49964885
个人分类: 数论 CF
上一篇Codeforces Round #332 (Div. 2)C. Day at the Beach(好题,)
下一篇POJ 2456 Aggressive cows(二分答案,最大化最小值)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭