【ABC320C】题解

发布时间 2023-10-10 13:34:17作者: rksm2333

AtCoder Beginner Contest 320 Problem C - Slot Strategy 2 (Easy) 题解

题目简述

给定 \(3\) 个长度为 \(m\) 的转盘,转动过后三个转盘分别可以在不同的时间停下,求停下时所有转盘都显示相同数字的最小时间。

思路

由于这题 \(m \le 100\),数据较水,所以可以先把每个数列都复制 \(2\) 遍,因为最坏情况下是每个转盘都只出现一样的数字一次,而且在同一个位置,这时最多转 \(3\) 圈就可以把首位统一。

\(3\) 重循环枚举位置,如果 \(3\) 个位置不相等,且数字一样,那么就更新答案,答案为三个位置中的最大值。

最后如果答案还是设定的初始值,那么输出 -1

Accepted Code

Accepted Record

#include<iostream>
#include<algorithm>
#include<climits>

using namespace std;

int m,ans = INT_MAX;
string a,b,c;

int main(){
  cin >> m >> a >> b >> c;
  a += a + a, b += b + b, c += c + c;
  for (int i = 1; i <= 3 * m; i++){
    for (int j = 1; j <= 3 * m; j++){
      for (int k = 1; k <= 3 * m; k++){
        if (i == j || j == k || i == k){
          continue;
        }
        if (a[i - 1] == b[j - 1] && b[j - 1] == c[k - 1] && a[i - 1] == c[k - 1]){
          ans = min(ans,max({i, j, k}) - 1);
        }
      }
    }
  }
  if (ans == INT_MAX){
    ans = -1;
  }
  cout << ans;
  return 0;
}