USACO-Runaround Numbers(枚举)

    xiaoxiao2021-03-25  140

    题目链接:Runaround Numbers

    因为每个数都不相同,所以可以枚举出所有的数,复杂度是 9! 。 排序后可以二分找答案。

    /* ID: xdujlx1 PROG: runround LANG: C++ */ #include<bits/stdc++.h> using namespace std; typedef long long ll; ll arr[100007]; int a[11]; bool vis[11]; int k; void ioinit() { freopen("runround.in","r",stdin); freopen("runround.out","w",stdout); } void check(int *a, int n) { int cnt=0; memset(vis,0,sizeof(vis)); int pos=0; while(!vis[pos]) { vis[pos]=true; cnt++; pos=(pos+a[pos])%n; } if(cnt==n&&pos==0) { ll res=0; for(int i=0;i<n;i++) { res*=10; res+=a[i]; } arr[k++]=res; } } bool used[11]; void creat(int pos, int val) { if(!val) { check(a,pos); return; } else { a[pos]=val; check(a,pos+1); } for(int i=1;i<10;i++) if(!used[i]) used[i]=true,creat(pos+1,i),used[i]=false; } int main() { ioinit(); for(int i=1;i<10;i++) used[i]=true,creat(0,i),used[i]=false; //for(int i=0;i<k;i++) cout << arr[i] << endl; sort(arr,arr+k); int n; scanf("%d",&n); int t=upper_bound(arr,arr+k,n)-arr; cout << arr[t] << endl; return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-7132.html

    最新回复(0)