码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #332 (Div. 2)D. Spongebob and Squares 数学

时间:2015-11-21 18:12:58      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:

D. Spongebob and Squares
 

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 15squares 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.

Sample test(s)
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 1 × 1 squares. So, 2 distinct squares in total.

技术分享

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

技术分享

 

 

题意:给你x,问你多少种n*m的情况使得,在当前这个矩形内小正方形的个数为x

题解:

       列式推: sigma(k=1,k=min(n,m))(n-k+1)*(m-k+1)=x;

        我们枚举n,得到m

技术分享
///1085422276
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
#define mem(a) memset(a,0,sizeof(a))
#define pb push_back

inline ll read()
{
    ll x=0,f=1;char ch=getchar();
    while(ch<0||ch>9){
        if(ch==-)f=-1;ch=getchar();
    }
    while(ch>=0&&ch<=9){
        x=x*10+ch-0;ch=getchar();
    }return x*f;
}
//****************************************
const int N=100000+350;
#define maxn 100000+5

ll x;

int main()
{
    x=read();
    vector<pair<ll,  ll> >  ans;
    ll sum=0;
    for(ll i=1; sum<=x; i++)
    {
        sum+=1ll*i*i;
        long long d=x-sum;
        long long k=1LL*i*(i+1)/2;
        if(d%k==0)
        {
            ans.push_back({i, d/k+i});
            ans.push_back({d/k+i, i});
        }
    }
    sort(ans.begin(), ans.end());
    ans.resize(unique(ans.begin(), ans.end())-ans.begin());
    printf("%d\n", ans.size());
    for(ll i=0;i<ans.size();i++)
        printf("%I64d %I64d\n", ans[i].first, ans[i].second);
    return 0;
}
代码

 

Codeforces Round #332 (Div. 2)D. Spongebob and Squares 数学

标签:

原文地址:http://www.cnblogs.com/zxhl/p/4984252.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!