답안 #18414

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
18414 2016-02-01T05:07:10 Z suhgyuho_william 구간 성분 (KOI15_interval) C++
100 / 100
602 ms 1984 KB
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <map>

using namespace std;

#define Asize 10

int N,M;
int a[1510],b[1510],tmp[1510];
char s[1510];
struct data{
	long long a[Asize];

	bool operator<(const data x)const{
		int i;

		for(i=0; i<Asize; i++){
			if(x.a[i] != a[i]) return a[i] < x.a[i];
		}
		return false;
	}
};
struct data2{
	long long a[26];
}cnt1[1510],cnt2[1510];
data t;
map<data,bool> Map;
long long square[10];

void setting(){
	int i,j,k;

	square[0] = 1;
	for(i=1; i<=3; i++) square[i] = square[i-1]*1501;
	scanf("%s",s);
	N = strlen(s);
	for(i=1; i<=N; i++) a[i] = s[i-1]-'a';
	scanf("%s",s);
	M = strlen(s);
	for(i=1; i<=M; i++) b[i] = s[i-1]-'a';
	if(N > M){
		for(i=1; i<=N; i++) tmp[i] = a[i];
		for(i=1; i<=M; i++) a[i] = b[i];
		for(i=1; i<=N; i++) b[i] = tmp[i];
		swap(N,M);
	}

	for(i=1; i<=N; i++){
		for(j=0; j<26; j++) cnt1[i].a[j] = cnt1[i-1].a[j];
		cnt1[i].a[a[i]]++;
	}
	for(i=1; i<=M; i++){
		for(j=0; j<26; j++) cnt2[i].a[j] = cnt2[i-1].a[j];
		cnt2[i].a[b[i]]++;
	}
}

int main(){
	int i,j,k;
	//freopen("input.txt","r",stdin);

	setting();

	for(i=N-1; i>=0; i--){
		Map.clear();
		for(j=1; j+i<=M; j++){
			for(k=0; k<Asize; k++) t.a[k] = 0;
			for(k=0; k<26; k++) t.a[k/3] += ((cnt2[j+i].a[k]-cnt2[j-1].a[k])*square[k%3]);
			Map[t] = true;
		}
		for(j=1; j+i<=N; j++){
			for(k=0; k<Asize; k++) t.a[k] = 0;
			for(k=0; k<26; k++) t.a[k/3] += ((cnt1[j+i].a[k]-cnt1[j-1].a[k])*square[k%3]);
			if(Map.find(t) != Map.end()){
				printf("%d",i+1);
				return 0;
			}
		}
	}

	printf("0");

	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 1852 KB Output is correct
2 Correct 0 ms 1852 KB Output is correct
3 Correct 0 ms 1852 KB Output is correct
4 Correct 3 ms 1852 KB Output is correct
5 Correct 2 ms 1852 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 54 ms 1852 KB Output is correct
2 Correct 33 ms 1852 KB Output is correct
3 Correct 0 ms 1852 KB Output is correct
4 Correct 0 ms 1852 KB Output is correct
5 Correct 58 ms 1852 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 241 ms 1852 KB Output is correct
2 Correct 265 ms 1852 KB Output is correct
3 Correct 255 ms 1852 KB Output is correct
4 Correct 248 ms 1852 KB Output is correct
5 Correct 258 ms 1852 KB Output is correct
6 Correct 249 ms 1852 KB Output is correct
7 Correct 257 ms 1852 KB Output is correct
8 Correct 256 ms 1852 KB Output is correct
9 Correct 260 ms 1852 KB Output is correct
10 Correct 252 ms 1852 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 49 ms 1852 KB Output is correct
2 Correct 514 ms 1984 KB Output is correct
3 Correct 443 ms 1984 KB Output is correct
4 Correct 20 ms 1852 KB Output is correct
5 Correct 602 ms 1984 KB Output is correct