开始的时候认为数据太大,直接模拟会超时,但其实还是可以直接模拟的,原因在于这种Runaround Numbers分布还比较稠密。另外要注意读题.
代码如下:
/*
ID:15674811
LANG:C++
PROG:runround
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<fstream>
using namespace std;
int conut(int *vis,int cnt)
{
int tmp=0;
for(int i=0;i<cnt;i++)
if(vis[i])
tmp++;
return tmp;
}
bool check(long long n)
{
long long x=n;
int vis[20];
int a[20];
memset(vis,0,sizeof(vis));
int cnt=0;
while(x)
{
cnt++;
x/=10;
}
int m=cnt;
cnt--;
while(n)
{
a[cnt]=n%10;
vis[a[cnt]]++;
if(a[cnt]==0)
return false;
n/=10;
cnt--;
}
for(int i=1;i<=9;i++)
if(vis[i]>=2)
return false;
int cur=0;
cnt=0;
memset(vis,0,sizeof(vis));
vis[0]=1;
while(true)
{
int t=(cur+a[cur])%m;
if((conut(vis,m)==m)&&(t==0))
return true;
if(vis[t])
return false;
if(conut(vis,m)>=m)
return false;
vis[t]=1;
cur=t;
}
}
int main()
{
ofstream fout("runround.out");
ifstream fin("runround.in");
//ifstream fin("lkl.txt");
long long n;
while(fin>>n)
{
n++;
while(true)
{
if(check(n))
break;
n++;
}
fout<<n<<endl;
}
return 0;
}
时间: 2024-11-07 08:50:58