#40593: C++(3ms, 352KB)不使用SET的方法


bobobo0413 (Andy)

學校 : 國立臺灣大學
編號 : 252359
來源 : [220.141.219.171]
最後登入時間 :
2024-11-21 23:06:25
e313. 最少相異字母 -- 2018年10月APCS | From: [114.137.26.191] | 發表日期 : 2024-05-29 22:39

解題報告:這題用SET可以很快解好,這裡練習不用SET的解題,首先要加快輸入輸出ios::sync_with_stdio(0);    cin.tie(0);    cout.tie(0);。先宣告一個變數rs存第一個字串,然後用s存接下來的字串,每輸入s就計算有幾種字母,和rs比較,if(num1<num)小於rs則取代rs=s;,若一樣,直接字串比大小else if(num1==num&&s<rs),小於rs則取代rs=s;。以下提供C++原始碼:

#include<bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
   int n,i,j,k,d=1,num,num1;
string rs,s;
cin>>n;
cin>>rs;
for(j=1;j<n;j++){
        cin>>s;
        if(d==1){
                num=0;
                int cnt[128]={0};
k=rs.length();
            for ( i=0; i<k; i++) cnt[rs[i]] = 1;
for ( i=0; i<128; i++)
num += cnt[i];
    d=0;
        }
        num1=0;
int cnt[128]={0};
k=s.length();
for ( i=0; i<k; i++) cnt[s[i]] = 1;
for ( i=0; i<128; i++)
num1 += cnt[i];
if(num1<num){
    rs=s;
    d=1;
}
else if(num1==num&&s<rs){
    rs=s;
    d=1;
}
}
cout<<rs<<'\n';
return 0;
}

 
ZeroJudge Forum