打表失败
事情是这样的,
我懒得用dfs
(其实是做错了) 然后想到题目给出的范围是n≤2×104<215 也就是说总共能分出的结果只有0-15,可以考虑打表求出对应的分解情况。
于是乎,我就这么做了() 然后出现了非常诡异的情况,评测结果一会RE一会TLE而且每次出现的点的位置还不同次数也不一样……
望dalao帮助
附上代码
#include<bits/stdc++.h>
using namespace std;
int a[1005];
string ans;
int main()
{
int n;
cin>>n;
int e=1;
while(n>0)
{
a[e++]=n%2;
n/=2;
}
int i;
while(pow(2,i)<=n)
{
i++;
}
//cout<<i<<endl;
for(int j=i;j>=1;j--)
{
string s;
if(a[j])
{
switch(j-1)
{
case 0:s="2(0)";break;
case 1:s="2";break;
case 2:s="2(2)";break;
case 3:s="2(2+2(0))";break;
case 4:s="2(2(2))";break;
case 5:s="2(2(2)+2(0))";break;
case 6:s="2(2(2)+2)";break;
case 7:s="2(2(2)+2+2(0))";break;
case 8:s="2(2(2+2(0)))";break;
case 9:s="2(2(2+2(0))+2(0))";break;
case 10:s="2(2(2+2(0))+2)";break;
case 11:s="2(2(2+2(0))+2+2(0))";break;
case 12:s="2(2(2+2(0))+2(2))";break;
case 13:s="2(2(2+2(0))+2(2)+2(0)";break;
case 14:s="2(2(2+2(0))+2(2)+2)";break;
case 15:s="2(2(2+2(0))+2(2)+2+2(0))";break;
}
ans=ans+s+"+";
}
}
if(ans[ans.length()-1]=='+') ans[ans.length()-1]='\0';
cout<<ans;//<<" "<<ans[ans.length()-1];
return 0;
}