hihocoder挑战赛26

时间:2021-08-04 11:53:44

某蒟蒻成功的·写出了T1并rank16。。。小岛的题目真难。。。

传送门:http://hihocoder.com/contest/challenge26

T1

如果你想要暴力枚举的话显然是不行的

如果你想要打表找规律的话显然也是不行的

可以(很容易地)想到逆推法

因为每一个n都是由某两个数结合而成

所以只要随机两个数并检验就可以了

细节就不明说了。

Code:

 #include <ctime>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define Rand(x) ((rand()%10000*10000+rand()%10000)%x)
using namespace std; int rec[],T,n; int doit()
{
bool flag=;int now=;memset(rec,,sizeof rec);
while (flag)
{
int A=Rand(n),B=n-A;now=;
while (A==) A=Rand(n),B=n-A;
while (!(A== && B==))
{
if (A==B) break;
if (A>B) A-=B,rec[++now]=;
else B-=A,rec[++now]=;
if (now>) break;
}
if (A== && B==) flag=;
if (flag) memset(rec,,sizeof rec),now=;
if (now>=) flag=;
}
for (int i=now+;i>=;i--) cout<<rec[i];
cout<<endl;
} void File()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
} int main()
{
srand(time());
cin>>T;
while (T--)
{
cin>>n;
if (n==) cout<<""<<endl;
else if (n==) cout<<""<<endl;
else if (n==) cout<<""<<endl;
else doit();
}
}

T2T3T4的话就贴个题解好了

code的话以后再更

传送门:https://media.hihocoder.com/contests/challenge26/solution.pdf

毕竟本蒟蒻实在是太弱了