第一次正式參加CodeChef的比賽,它是印度的一個類似cf的網站,不過我看它的那些評論時間比cf還早(cf好像是10年才建立的)
這個網站好像是每月都有一次這個XX Cook Off,而且題目不像cf那樣從易到難(這場是從難到易。。。不知道以前的怎麼樣)
好吧,進入正題,一開始習慣性的看A題,還想了10來分鐘(以為是cf的模式)沒想法,重新整理一下,發現最後一題是全場最水的!咋一看,求子串!不需要用到什麼進階演算法,直接爆就ok,求出每行字串26個字母出現次數,然後對n行進行掃描,求出n行公用字母(注意可以重複,例如“hpp”,開始沒想就1wa)。
#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <time.h>#include <cstdio>#include <math.h>#include <iomanip>#include <cstdlib>#include <limits.h>#include <string.h>#include <iostream>#include <fstream>#include <algorithm>using namespace std; #define LL long long#define MIN INT_MIN#define MAX INT_MAX#define PI acos(-1.0)#define FRE freopen ("input.txt","r",stdin)#define FF freopen ("output.txt","w",stdout)#define eps 1e-8#define N 50005char str[110];int cnt[110][30];bool vis[30];int ans[30];void gao(int k,int id){ int i; for (i = 0 ; i < k ; i++)printf("%c",id+'a');}int main(){ int n; while(scanf("%d",&n) != -1 ){ int i,j; memset(cnt,0,sizeof(cnt)); for (i = 0 ; i < n ;i++ ){ scanf("%s",str); for (j = 0; j < strlen(str); j++) { int id = str[j] - 'a'; vis[id] = 1; cnt[i][id]++; } } int k = 0; bool ok = 0; for (i = 0 ; i < 26; i++){ int minm = MAX; for (j = 0; j < n; j++) { if (cnt[j][i] == 0) { break; } else minm = min(cnt[j][i],minm); } if (j >= n) { gao(minm,i); ok = 1; } } if (!ok) printf("no such string"); puts(""); } return 0;}