Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
求大佬帮忙看看两份几乎一模一样的程序,一份能过,一份TLE#include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <utility> #include <queue> #define INF 0x3f3f3f3f #define LL long long using namespace std; typedef pair<LL, pair<LL, LL> > p; p ans[1010]; int main() { LL n, st, en, sum; while (~scanf("%I64d", &n)){ st = 1, en = 1, sum = 0; int k = 0; while (1){ if (sum == n) ans[k++] = p(en-st, pair<LL, LL>(st, en-1)); if (sum >= n) sum -= st*st, st++; else{ if (en*en <= n) sum += en*en, en++; else break; } } printf("%d\n", k); for (int i = 0; i < k; i++){ printf("%I64d ", ans[i].first); for (int j = ans[i].second.first; j <= ans[i].second.second; j++) printf("%I64d ", j); puts(""); } } return 0; } #include <iostream> #include <cstring> #include <cstdlib> #include <algorithm> #include <cstdio> using namespace std; typedef long long ll; typedef pair<ll,ll>T; T a[1010]; int lo,hi,k; ll s; int main() { ll n; while(~scanf("%lld",&n)){ lo=1,hi=1,k=0; s=0; while(true){ if(s==n)a[k++]=T(lo,hi); if(s>=n)s-=lo*lo,lo++; else{ if(hi*hi<=n)s+=hi*hi,hi++; else break; } } printf("%d\n",k); for(int i=0;i<k;++i){ printf("%d ",a[i].second-a[i].first); for(int j=a[i].first;j<a[i].second;++j){ printf("%d ",j); } printf("\n"); } } return 0; } 第一份可以过,第二份TLE,但是这个复杂度是完全相同的,为什么呢? Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator