intさわだんのBlack History

刹那的レジェンドになりたい。

AOJ0578 看板

joi予選の問題。

こういうのめっちゃ苦手だけど成長したのか瞬殺だった。


解法:線形探索

#include <cstdio>
#include <cstring>

using namespace std;

int main(){
	
	int n,ans=0;
	
	char name[27],s[102][102];
	
	scanf("%d",&n);
	
	scanf("%s",&name);
	
	for(int i = 0;i < n;i++){
		scanf("%s",&s[i]);
	}
	
	int nlen = strlen(name);
	
	for(int i = 0;i < n;i++){
		
		int slen = strlen(s[i]);
		
		for(int start = 0;start < slen;start++){
			
			if(s[i][start] != name[0]) continue;
			
			for(int haba = 0;haba < slen;haba++){
				
				for(int j = 1;j < nlen;j++){
					
					if(name[j] != s[i][start+(haba+1)*j]) goto out;
					if(start+(haba+1)*j >= slen) goto out;
					
				}
				
				ans++;
				goto heaven;
				
				out:
				;
			}
			
		}
		
		heaven:
		;
	}
	
	printf("%d\n",ans);
	
	return 0;
	
}