CF 593 A 2Char(選擇合適的列舉方式)

2021-07-10 11:04:59 字數 1815 閱讀 9158

cf 593 a 2char

題意:

給出n個只含小寫英文本母的字串,選擇若干字串,拼成乙個最多隻含兩種字母的最長的字串,輸出最長字串長度。

分析:

我是選擇列舉每個最多隻含兩種字母字串,然後遍歷其他只含改字串所擁有字母的字串,最後在處理下都是單種類字母字串的拼接,這樣寫不僅**冗長,而且也容易出錯。

看了別人家的**,發現可以列舉最終字串含有的所有可能的字母組合,然後對每種組合遍歷所有的字串,判斷每個是不是只含有這種組合。nice~co

de:

//15ms 0kb

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=110;

int n,ans;

string s[maxn];

int main()

ans=0;

for(int i=0;i<26;i++)//列舉26個字母中的每乙個字母

}if(flag) tmp+=len;

}ans=max(ans,tmp);}}

printf("%d\n",ans);

}return

0;}

//15ms 100kb

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=1010;

int n,cnt,ans;

char s[110][maxn];

int vis[30],flag[110],num[110][3],len[110];

int main()

}if(cnt==3) flag[i]=1;//該字串含有2個以上種類的字元,廢棄

else

else

//cnt=1;//單一字元合併

}if(flag[i]!=1)//未成功合併}}

}int a,b;

ans=0;

for(int i=0;i//列舉每個字串

else a=num[i][1],b=-1;//只有一種字元

for(int j=0;jif(i==j||flag[j]) continue;

if(b!=-1)//i字串含有兩個字元

}else

//i字串只含有一種字元

}ans=max(ans,tmp);

}//處理選擇兩個最長單字串情況

int max1=0,ind=-1,max2=0;

for(int i=0;i//選擇最長的單字串

if(!flag[i]&&num[i][0]==0&&len[i]>max1)

for(int i=0;iif(!flag[i]&&num[i][0]==0&&len[i]>max2&&i!=ind) max2=len[i];

//不能用len[i]!=max1來判斷重複,因為有可能最長單字串不止乙個

printf("%d\n",max(max1+max2,ans));

}return

0;}

char和varchar2 varchar的區別

char和varchar2 varchar的區別 1 char是長度固定的型別,varchar2是動態變化的,譬如 存在字串 abcde 對於乙個大小為char 20 而言,它將儲存20個字元,但是有15個是空字元,而varchar 20 則是占用3個位元組的長度,20只是能儲存的最大值。2 cha...

CF刷刷水題找自信 2

題目意思 有1到n個城市,相鄰城市相隔1公里,現在有一輛車從1號城市開往n號城市,這輛車每公里耗油1公升,油箱容量為v,在第i號城市的油價為i元一公升,剛開始車裡沒油,問到達n號城市的最小花費是多少。解題思路 這道題有點貪心的意思,我們知道在開始的時候油價是最低的,也就是說越早加油越便宜,這就給出了...

char和varchar2的區別

區別 1 char的長度是固定的,而varchar2的長度是可以變化的,比如,儲存字串 abc 對於char 20 表示你儲存的字元將佔20個位元組 包括17個空字元 而同樣的varchar2 20 則只占用3個位元組的長度,20只是最大值,當你儲存的字元小於20時,按實際長度儲存。2 char的效...