分析:读题比做题难~ ~!!,要找规律,给出一个有帮助的数列,0 1 3 6 10 15 21 28 ......
Code
#include <iostream>
using namespace std;
__int64 str[500002];
__int64 biao[500002];
void ChangeString(__int64 s[],__int64 n)
{
__int64 *temp = new __int64[n];
memcpy(temp,s,n*sizeof(__int64));
memcpy(s+1,temp,n*sizeof(__int64));
delete[] temp;
}
void Convert(__int64 s[],__int64 n)
{
for(__int64 i=0,j=n-1;i<=j;++i,--j)
swap(s[i],s[j]);
}
int main()
{
__int64 n,m;
biao[0] = 0;
for(int i=1;i<=50000;++i)
biao[i] = biao [i-1] + i;
while(cin>>n>>m,n!=-1 || m!=-1)
{
__int64 i;
for(i=0;i<n;++i)
str[i] = i+1;
__int64 min = n-1;
for(i=0;;++i)
{
if(biao[i]>=m)
break;
}
Convert(str+n-i-1,i+1);
if(biao[i] != m)
{
__int64 t = biao[i]-m;
__int64 c = str[n-i-1+t];
ChangeString(str+n-i-1,t);
str[n-i-1] = c;
}
cout<<str[0];
for(__int64 i=1;i<n;++i)
cout<<" "<<str[i];
cout<<endl;
}
return 0;
}