| ||||||||||
| 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 | |||||||||
O(n)的算法为啥会tle...答案应该是对的,复杂度也只有O(n),在自己机子上试50000 12497500也能秒出正确结果.为啥C++ G++全是TLE...
#include<cmath>
#include<iostream>
#include<string>
#include<deque>
#include<sstream>
#include<cstdio>
#define EPS 1e-8
inline std::string to_string(int x){
std::string a;
while (x>0){
a = (char)(x%10+'0') + a;
x/=10;
}
return a;
}
int main(){
int n; long long m;
while (scanf("%d %Ld",&n,&m)==2&&n!=-1){
std::string res;
float l = (1+sqrt(1.0+8.0*m))/2;
long lb = (int)l+1;
for (int i=1;i<=n-lb;i++) {
res+=to_string(i);
res+=' ';
}
std::deque<int> q;
if (fabs(l-lb)<=EPS) for (int i=n;i>=n-lb+1;i--) q.push_back(i);
else{
int kn = m - (lb-1)*(lb-2)/2;
int frt = kn+n-lb+1;
for (int i=n;i>=n-lb+1;i--) {
if (i==frt) q.push_front(i);
else q.push_back(i);
}
}
for (std::deque<int>::iterator ptr = q.begin(); ptr<q.end()-1;ptr++) {
res+=to_string(*ptr);
res+=' ';
}
res+=to_string(*(q.end()-1));
printf("%s\n",res.c_str());
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator