【题意】给一个数n,问你能找到一些连续的数使得这些每个连续数的平方值之和等于这个数吗?如果找到他们的话吗,输出这些信息!
【分析】two pointers 裸题,这是专题的最后一个了,希望通过近期对two pointers的专题训练,下次运到这类题可以快速反应,秒A。
【-><-】以后过不了这类题,手撕队友!
【AC代码】
#include <assert.h>
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
#define ll long long
vector<pair<ll,ll> >ans;
void output(ll const &x){
char tmp[100];
sprintf(tmp,"%I64d",x);
cout<<tmp;
}
int main(){
ll n;
cin>>n;
ll sum = 1;
ll l=1,r=1;
while(l*l<=n){
if(sum<n){
r++;
sum += r*r;
}else{
if(sum==n) ans.push_back(make_pair(l,r));
sum -= l*l;
l++;
}
}
cout<<ans.size()<<endl;
for(ll i=0; i!=ans.size(); i++){
output(ans[i].second-ans[i].first+1);
cout<<" ";
for(ll j=ans[i].first; j<=ans[i].second; j++){
output(j);
cout<<" ";
}
cout<<endl;
}
return 0;
}