codeforces 599D. Spongebob and Squares【推公式+暴力枚举】

原创 2016年08月30日 20:26:39

D. Spongebob and Squares
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Spongebob is already tired trying to reason his weird actions and calculations, so he simply asked you to find all pairs of n and m, such that there are exactly x distinct squares in the table consisting of n rows and m columns. For example, in a 3 × 5 table there are 15 squares with side one, 8 squares with side two and 3 squares with side three. The total number of distinct squares in a 3 × 5 table is15 + 8 + 3 = 26.

Input

The first line of the input contains a single integer x (1 ≤ x ≤ 1018) — the number of squares inside the tables Spongebob is interested in.

Output

First print a single integer k — the number of tables with exactly x distinct squares inside.

Then print k pairs of integers describing the tables. Print the pairs in the order of increasing n, and in case of equality — in the order of increasing m.

Examples
input
26
output
6
1 26
2 9
3 5
5 3
9 2
26 1
input
2
output
2
1 2
2 1
input
8
output
4
1 8
2 3
3 2
8 1
Note

In a 1 × 2 table there are 2 1 × 1 squares. So, 2 distinct squares in total.

In a 2 × 3 table there are 6 1 × 1 squares and 2 2 × 2 squares. That is equal to 8 squares in total.




把③化简得到 :6*x = 6*n*n*m - 3*(n+m)*n*(n-1) + n*(n-1)*(2*n-1)

进而有 (3*n*n+3*n)*m = 6*x + n*n*n - n

枚举n求m即可

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
typedef long long ll;
using namespace std;
struct Node{
    ll nn,mm;
};
vector<Node>ans;
ll high=5000000;
int main()
{
    ll x;
    scanf("%I64d",&x);
    for(ll n=1;n<=high;n++){  //枚举n
        ll a=6*x+n*n*n-n;
        ll b=3*n*n+3*n;
        if(a%b!=0)continue;
        ll m=a/b;
        if(n>m)break;         //枚举到n<=m即可,因为在n>m时的结果等于n<m所有结果(n,m)的交换,即(m,n)
        Node now;
        now.nn=n;
        now.mm=m;
        ans.push_back(now);
    }
    int top=ans.size()-1;
    //如果最末答案为(n,n),则总数为2*(n<=m的对数)-1,否则总数为2*(n<=m的对数)
    if(ans[top].nn==ans[top].mm) top=ans.size()*2-1;
    else top=ans.size()*2;
    printf("%d\n",top);
    int i;
    top=ans.size()-1;
    for(i=0;i<=top;i++){
        printf("%I64d %I64d\n",ans[i].nn,ans[i].mm);
    }
    if(ans[top].nn==ans[top].mm)i=top-1;
    else  i=top;
    for(;i>=0;i--){
        printf("%I64d %I64d\n",ans[i].mm,ans[i].nn);
    }
    return 0;
}






版权声明:写得不好,希望大家及时指出,共同进步(っ °Д °;)っ另外转载也希望注明一下出处,蟹蟹~

相关文章推荐

Codeforces 599D Spongebob and Squares【思维枚举+数学方程】

D. Spongebob and Squares time limit per test 2 seconds memory limit per test 256 megabytes ...

Codeforces 599 D Spongebob and Squares

传送门: http://codeforces.com/problemset/problem/599/D题意: 求出所有的n和m,使得在n*m的矩形里恰有k个不同的正方形和明显的数学公式题嘛!! ...
  • yp_2013
  • yp_2013
  • 2016年01月16日 23:58
  • 666

CodeForces 599D Spongebob and Squares(DP+math)

Spongebob and Squares Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u...

【Codeforces Round 332 (Div 2)D】【数学 公式推导】Spongebob and Squares 正方形数量恰好为x个的所有大矩形

D. Spongebob and Squares time limit per test 2 seconds memory limit per test 256 megabyt...

Codeforces 552D Vanya and Triangles【暴力枚举+思维】

D. Vanya and Triangles time limit per test 4 seconds memory limit per test 512 megabytes ...

【Codeforces Round 262 (Div 2)B】【暴力枚举】Little Dima and Equation b乘数位之和的a次方+c=数字

Little Dima and Equation time limit per test 1 second memory limit per test 256 megabyte...

Codeforces 426 B Sereja and Mirroring【暴力枚举+模拟】水题

B. Sereja and Mirroring time limit per test 1 second memory limit per test 256 megabytes ...

Codeforces #410(div2) B. Mike and strings (暴力枚举

B. Mike and stringstime limit per test2 secondsmemory limit per test256 megabytesinputstandard input...

codeforces 324# E. Anton and Ira (暴力枚举+贪心)

题目:http://codeforces.com/contest/584/problem/E 题意:给定两个排列p1和p2。可以交换p1中的两个元素p1[i],p1[j],花费为|i-j|,求最小的...
  • w20810
  • w20810
  • 2015年10月10日 18:38
  • 365

Codeforces 673C Bear and Colors【暴力枚举】

C. Bear and Colors time limit per test 2 seconds memory limit per test 256 megabytes inpu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:codeforces 599D. Spongebob and Squares【推公式+暴力枚举】
举报原因:
原因补充:

(最多只允许输入30个字)