指路:http://acm.hdu.edu.cn/contests/contest_show.php?cid=858
當(dāng)時(shí)看到全英文的時(shí)候是真的放棄了醒第,因?yàn)槲业拇_對中文題依賴太深了溯祸,那段時(shí)間真的一點(diǎn)都不想學(xué)習(xí)叹俏,一點(diǎn)都不想碰到代碼,所以現(xiàn)在要重新去做一做吧
照舊貼上大佬們的題解鏈接:https://blog.csdn.net/weixin_43880084/article/details/90344526
https://www.cnblogs.com/-yjun/p/10891597.html
Hello GDCPC
題目:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=858
參考:https://www.e-learn.cn/content/qita/2326754
題意:給你一個(gè)字符串嚷往,讓你在里面尋找可不連續(xù)的字符串“xtCpc”葛账,問有多少個(gè)
題目有問題,給了個(gè)gdCpc
樣例:輸入:10 xtCxtCpcpc 輸出:2
思路:只要保證每個(gè)字符前面出現(xiàn)的次數(shù)大于本字符出現(xiàn)的次數(shù)就好(想想為什么)
為了保證字符順序
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
char s[maxn];
int main()
{
int n;
while(~scanf("%d",&n))
{
scanf("%s",s);
int x1=0,x2=0,x3=0,x4=0,x5=0,ans=0;
for(int i=0;i<n;i++)
{
if(s[i]=='x') x1++;
if(s[i]=='t'&&x2<x1) x2++;
if(s[i]=='C'&&x3<x2) x3++;
if(s[i]=='p'&&x4<x3) x4++;
if(s[i]=='c'&&x5<x4) x5++;
if(x1&&x2&&x3&&x4&&x5)
{
ans++;
x1--;
x2--;
x3--;
x4--;
x5--;
}
}
printf("%d\n",ans);
}
return 0;
}
也可用隊(duì)列記錄每個(gè)字符的位置,然后貪心,挑出每個(gè)隊(duì)列中符合條件的最前面的字符.直到有一個(gè)隊(duì)列為空.
參考:https://www.cnblogs.com/-yjun/p/10891597.html
#include <bits/stdc++.h>
#define P pair<int,int>
#define fir first
#define sec second
using namespace std;
typedef long long ll;
const int N=2e5+5;
const int mod=998244353;
char s[N];
map<char,int> m;
int main(){
m['x']=1;m['t']=2;m['C']=3;m['p']=4;m['c']=5;
int n;
while(~scanf("%d%s",&n,s)){
queue<int> q[10];
for(int i=0;i<n;i++){
q[m[s[i]]].push(i);
//cout<<m[s[i]]<<endl;
}
int ans=0;
while(!q[1].empty()){
int pos=q[1].front();
q[1].pop();
int f=0;
for(int i=2;i<=5;i++){
while(!q[i].empty()&&pos>q[i].front()) q[i].pop();
if(q[i].empty()){
f=1;
break;
}
else pos=q[i].front(),q[i].pop();
}
if(f) break;
else ans++;
}
cout<<ans<<endl;
}
return 0;
}
#include <bits/stdc++.h>
#define P pair<int,int>
#define fir first
#define sec second
using namespace std;
typedef long long ll;
const int N=2e5+5;
const int mod=998244353;
char s[N];
//map<char,int> m;
int main(){
int n;
while(~scanf("%d%s",&n,s)){
map<string,ll> st;
for(int i=0;i<n;i++){
if(s[i]=='x') st["x"]++;
else if(s[i]=='t'){
if(st["x"]>0) st["x"]--,st["xt"]++;
}
else if(s[i]=='C'){
if(st["xt"]>0) st["xt"]--,st["xtC"]++;
}
else if(s[i]=='p'){
if(st["xtC"]>0) st["xtC"]--,st["xtCp"]++;
}
else if(s[i]=='c'){
if(st["xtCp"]>0) st["xtCp"]--,st["xtCpc"]++;
}
}
cout<<st["xtCpc"]<<endl;
}
return 0;
}
Can you raed it croretcly?(模擬)
題目:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1012&cid=858
參考:https://www.e-learn.cn/content/qita/2326751
思路:就是判斷兩個(gè)字符串相同籍琳,注意如果不同的時(shí)候要分情況討論
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(register int i=(a);i<=(b);i++)
#define dep(i,a,b) for(register int i=(a);i>=(b);i--)
using namespace std;
const int maxn=2e5+5;
//const double pi=acos(-1.0);
//const double eps=1e-9;
//const ll mo=1e9+7;
int n,m,k;
int a[maxn],c[maxn];
int ans,tmp,cnt;
int flag;
char s[maxn],ss[maxn];
bool ok[maxn];
string s1,s2;
int main()
{
int T,cas=1;
while(scanf("%s%s",s,ss)!=EOF)
{
s1=s;s2=ss;
int l1=s1.length();
int l2=s2.length();
if(s1==s2) puts("Equal");
else
{
if(l1!=l2) puts("No");
else if(s1[0]==s2[0]&&s1[l1-1]==s2[l2-1])
{
sort(s1.begin(),s1.end());
sort(s2.begin(),s2.end());
if(s1==s2) puts("Yes");
else puts("No");
}
else puts("No");
}
}
return 0;
}
SSY and JLBD
題目:http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1011&cid=858
參考:https://www.cnblogs.com/-yjun/p/10891597.html
思路:1.十三幺:東,南,西,北,紅中,白板,發(fā)財(cái),一條,九條,一萬,九萬,一筒,九筒,若這十三張3牌你都有,那就隨便胡其中一個(gè)(只能胡這十三種任何一個(gè),其他不行)
2.九蓮寶燈:在萬、筒贷祈、條中的某一種以1112345678999的形式加上1到9其中任意一張成立趋急,必須是門前清的狀態(tài)。也稱作“九連寶燈”付燥。
分析:思考下這兩種胡牌狀態(tài)
十三幺:萬 筒 條 至少需要 1,9 為六張宣谈,東,南,西,北,紅中,白板,發(fā)財(cái), 為七張 ,剩下為其中一張
可記錄一下這些牌的個(gè)數(shù)键科,如果都大于等于1闻丑,且總和為14即可漩怎。
同樣九蓮寶燈: 萬筒條三種,可記錄每種出現(xiàn)的次數(shù)嗦嗡,而且記錄下每種里面每個(gè)牌的個(gè)數(shù)勋锤。
只要總次數(shù)為14并且有三個(gè)以上的1 三個(gè)以上的9 中間2345678大于等于1就可以。
else 不知道
原文:https://blog.csdn.net/qq_37748451/article/details/90368388
#include <bits/stdc++.h>
#define P pair<int,int>
#define fir first
#define sec second
using namespace std;
typedef long long ll;
const int N=2e5+5;
const int mod=998244353;
map<string,int> m;
string t[10]={
"dong","nan","xi","bei","zhong","fa","bai"
};
int main(){
string s;
int f=0;
int ma=0;
string tmp="jj";
string hh;
for(int i=1;i<=14;i++){
cin>>s;
if(s[0]<='9'&&s[0]>='0'){
if(tmp=="jj") tmp=s[1];
if(s[1]!=tmp[0]) ma=1;
}
else ma=1;
if(m[s]==1&&f==0){
f=1;
string hh=s;
continue;
}
m[s]++;
}
map<string,int>::iterator it=m.begin();
if(m["1w"]==1&&m["9w"]==1&&m["1p"]==1&&m["9p"]==1&&m["1s"]==1&&m["9s"]==1){
int f=0;
for(int i=0;i<7;i++){
if(m[t[i]]!=1) f=1;
}
if(f) puts("I dont know!");
else puts("shisanyao!");
}
else{
if(ma) puts("I dont know!");
else{
m[hh]++;
if(m["1"+tmp]>=3&&m["9"+tmp]>=3&&m["2"+tmp]>=1&&m["8"+tmp]>=1){
puts("jiulianbaodeng!");
}
else{
puts("I dont know!");
}
}
}
return 0;
}