ARC084-D SmallMultiple (700)

グラフにするやつ

見た目DPに見えるのでそれを考えるが、グラフに変換すると一発

modを取るのを試すとできる

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<vector>
  4. #include<queue>
  5. #define lol(i,n) for(int i=0;i<n;i++)
  6. #define mod 1000000007
  7. typedef long long ll;
  8. using namespace std;
  9. int dis[100010],k;
  10. typedef pair<int,int> P;
  11. priority_queue<P,vector<P>,greater<P> >Q;
  12. int main(){
  13. cin>>k;
  14. lol(i,k)dis[i]=mod;
  15. Q.push(make_pair(0,0));
  16. int ans=mod;
  17. while(!Q.empty()){
  18. int cost=Q.top().first;
  19. int now=Q.top().second;
  20. Q.pop();
  21. if(!now&&cost)ans=min(ans,cost);
  22. if(dis[now]<=cost)continue;
  23. dis[now]=cost;
  24. Q.push(make_pair(cost,now*10%k));
  25. Q.push(make_pair(cost+1,(now+1)%k));
  26. }
  27. cout<<ans<<endl;
  28. return 0;
  29. }

700点チャレンジ1問目