제출 #205033

#제출 시각아이디문제언어결과실행 시간메모리
205033MetBKlavir (COCI17_klavir)C++14
0 / 160
243 ms23964 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

using namespace __gnu_pbds;

#define N 1000001

using namespace std;

typedef long long ll;
typedef unsigned long long ull;

const ll INF = 1e18, MOD = 1e9 + 7, MOD2 = 1e6 + 3;

int n, m;
ll pf[N], pw[N], s[N];

int main () {
	cin >> n;
	cin >> m;

    pw[0] = 1;

    for (int i = 1; i <= m; i++)
        pw[i] = n * pw[i-1] % MOD;

	for (int i = 0; i < m; i++) {
		cin >> s[i];
	}

	for (int i = 1; i < m; i++) {
		int j = pf[i-1];
		while (j > 0 && s[j] != s[i])
			j = pf[j-1];
		if (s[i] == s[j]) j++;
		pf[i] = j;
	}

	ll ans = n;

	cout << n << '\n';


    for (int i = 1; i < n; i++) {

		int l = i - 1, r = i;

		while (l != r) {
			if (l > r) {
				ans = (ans + MOD - pw[l+1]) % MOD;
				l = pf[l] - 1;
			}

			if (l < r) {
				ans = (ans + pw[r+1]) % MOD;
				r = pf[r] - 1;
			}
		}

        cout << ans << '\n';
    }
}

컴파일 시 표준 에러 (stderr) 메시지

klavir.cpp: In function 'int main()':
klavir.cpp:24:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
     for (int i = 1; i <= m; i++)
     ^~~
klavir.cpp:27:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
  for (int i = 0; i < m; i++) {
  ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...