| ||||||||||
| 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 | |||||||||
?#include <iostream>
#include <string>
#include <stack>
using namespace std;
long NextTreeIdentify(string t)
{
string s,t2,t001("001");
s = t;
long res;
int node,i,posof0,posof001;
bool end = true;
for(i=0;i<=s.size()-3;i++)
{
t2 = s.substr(i,3);
if(t2.compare(t001)==0)
{
posof001 = i;
break;
}
}
end = true;
for(i=posof001+3;i<s.size();i++)
{
if(s[i] != '1')
{
end = false;
break;
}
}
if(!end)
{
/*
s.erase(posof001+1,2);
posof0 = s.find_first_of("0",posof001+1);
s.insert(posof0+1,"1");
s.insert(posof0+1,"0");*/
s.replace(posof001,3,"0");
posof0 = s.find_first_of("0",posof001+1);
s.replace(posof0,1,"001");
}
else
{
s[0] = '0';
for(i=1;i<s.size();i++)
{
if(i%2 == 0)
s[i] = '1';
else
s[i] = '0';
}
}
i = s.size()-1;
res = 0;
while(i>=2)
{
node = s[i]-'0';
if(node == 1)
res += node<<i;
i--;
}
return res;
}
void doRun()
{
long res,n,t;
int node;
stack<int> tree;
string s;
scanf("%ld",&n);
if(n == 0||n == 4)
{
res = n;
}
else
{
t = n;
while(1)
{
node = t % 2;
tree.push(node);
if (t<=1)break;
t>>=1;
}
if(tree.size()>30)
return;
while(!tree.empty())
{
s.insert(0,(char*)(tree.top()+'0'));
tree.pop();
}
res = NextTreeIdentify(s);
}
printf("%ld\n",res);
}
int main()
{
//while(1)
doRun();
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator