Time Limit: 10000MS Memory Limit: 64000K
Total Submissions: 4589 Accepted: 980
Case Time Limit: 2000MS
连续整数的平方和要等于目标值,尺取法。水题
/*AC*/
/*Memory 144K Time 3360MS*/
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> P;
vector<P> vec;
int main(){
ll n;
while(scanf("%lld", &n) != EOF){
ll s = 1, e = 1, sum = 0;
ll cnt = 0;
vec.clear();
while((e-1)*(e-1) <= n){
while(sum < n){
sum += e*e;
e++;
}
if(sum == n){
cnt++;
vec.push_back(P(s, e));
}
if(s < e){
sum -= s*s;
s++;
}
}
printf("%lld\n", cnt);
int len = vec.size();
for(int i=0; i<len; i++){
printf("%lld ", vec[i].second - vec[i].first);
for(ll j=vec[i].first; j<vec[i].second; j++)
printf("%lld ", j);
printf("\n");
}
}
return 0;
}