# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
28264 | 점수판에 아이디와 팀명이 같이 표기되니, 신중하게 적어주세요. (#68) | Play Onwards (FXCUP2_onward) | C++14 | 9 ms | 2300 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
#define SZ(v) ((int)(v).size())
#define ALL(v) (v).begin(),(v).end()
#define one first
#define two second
typedef long long ll;
typedef pair<int, int> pi; typedef pair<ll, int> pli; typedef pair<ll, pi> plp;
typedef tuple<int, int, int> ti; typedef tuple<ll, int, int> tli;
const int INF = 0x3f2f1f0f;
const ll LINF = 1ll * INF * INF;
const int MAX_N = 2e2 + 10;
int N, K; char S[MAX_N][50]; int sN[MAX_N], C[MAX_N];
vector<int> Ed[MAX_N];
bool vis[MAX_N];
bool isCon(int i, int j) {
for(int a=0; a+K-1<sN[i]; a++) for(int b=0; b+K-1<sN[j]; b++) {
bool isCan = true;
for(int k=0; k<K; k++) if(S[i][a+k] != S[j][b+k]) {isCan = false; break;}
if(isCan) return true;
}
return false;
}
bool impos = false;
void dfs(int v, int c) {
vis[v] = true;
C[v] = c;
for(int w : Ed[v]) {
if(vis[w] == true) {
if(C[w] + C[v] != 1) {impos = true;}
}else dfs(w, 1-C[v]);
}
}
int main() {
cin >> N >> K;
for(int i=0; i<N; i++) scanf("%s", S[i]), sN[i] = strlen(S[i]);
for(int i=0; i<N; i++) for(int j=i+1; j<N; j++) {
if(isCon(i, j)) {
// printf("%d %d\n", i, j);
Ed[i].push_back(j), Ed[j].push_back(i);
}
}
for(int i=0; i<N; i++) if(vis[i] == false) {
dfs(i, 0);
}
if(impos) puts("No");
else {
puts("Yes");
int cnt[2] ={0, 0};
for(int i=0; i<N; i++) cnt[C[i]]++;
if(cnt[0] == N || cnt[1] == N) {
for(int i=0; i<N-1; i++) printf("%d\n", 1);
for(int i=N-1; i<N; i++) printf("%d\n", 2);
}else for(int i=0; i<N; i++) printf("%d\n", C[i] + 1);
}
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |