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的效...