#38982: c++(3ms, 360KB)這題用set比較快


bobobo0413 (杜拜、慕尼黑、蘇黎世、清邁、東京、首爾、布拉格)

學校 : 國立臺灣大學
編號 : 252359
來源 : [42.70.136.106]
最後登入時間 :
2024-05-20 02:23:13
m932. 2. 蜜蜂觀察 -- 2024年1月APCS | From: [114.137.70.179] | 發表日期 : 2024-01-07 20:12

c++(3ms, 360KB)

解題思路:    ios::sync_with_stdio(0);    cin.tie(0);可增加輸入輸出效率,開始位置在(m-1,0)。為了程式乾淨,另外寫一個函式,將方位寫清楚,要仔細檢查,避免沒寫好,以及邊界要設定。使用set裝走過的字母,好處是不會重複,所以直接s.size()就能輸出包含幾種字母。以下提供C++原始碼:

#include<bits/stdc++.h>
using namespace std;
int m,n,k,i,j,b[101],f,g;
char a[21][21];
set<int>s;
void p(int c,int d,int e)
{
if(e==0)
{
    if(c-1>=0)
    c--;
}
else if(e==1)
{
    if(d+1<n)
    d++;
}
else if(e==2)
{
    if(d+1<n&&c+1<m)
    {
        c++;
    d++;
    }
}
else if(e==3)
{
    if(c+1<m)
    c++;
    }
else if(e==4)
{
    if(d-1>=0)
    d--;
    }
    else
{
    if(d-1>=0&&c-1>=0)
    {
        c--;
        d--;
    }
    }
s.insert(a[c][d]);
cout<<a[c][d];
f=c;
g=d;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>m>>n>>k;
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
        cin>>a[i][j];
    for(i=0;i<k;i++)
        cin>>b[i];
    f=m-1;
    g=0;
    for(i=0;i<k;i++)
        p(f,g,b[i]);
cout<<"\n"<<s.size()<<"\n";
return 0;
}

 
#39022: Re: c++(3ms, 360KB)這題用set比較快


bobobo0413 (杜拜、慕尼黑、蘇黎世、清邁、東京、首爾、布拉格)

學校 : 國立臺灣大學
編號 : 252359
來源 : [42.70.136.106]
最後登入時間 :
2024-05-20 02:23:13
m932. 2. 蜜蜂觀察 -- 2024年1月APCS | From: [114.137.70.179] | 發表日期 : 2024-01-08 13:21

c++(3ms, 360KB)

解題思路:    ios::sync_with_stdio(0);    cin.tie(0);可增加輸入輸出效率,開始位置在(m-1,0)。為了程式乾淨,另外寫一個函式,將方位寫清楚,要仔細檢查,避免沒寫好,以及邊界要設定。使用set裝走過的字母,好處是不會重複,所以直接s.size()就能輸出包含幾種字母。以下提供C++原始碼:

#include
using namespace std;
int m,n,k,i,j,b[101],f,g;
char a[21][21];
sets;
void p(int c,int d,int e)
{
if(e==0)
{
    if(c-1>=0)
    c--;
}
else if(e==1)
{
    if(d+1    d++;
}
else if(e==2)
{
    if(d+1    {
        c++;
    d++;
    }
}
else if(e==3)
{
    if(c+1    c++;
    }
else if(e==4)
{
    if(d-1>=0)
    d--;
    }
    else
{
    if(d-1>=0&&c-1>=0)
    {
        c--;
        d--;
    }
    }
s.insert(a[c][d]);
cout<f=c;
g=d;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>m>>n>>k;
    for(i=0;i        for(j=0;j        cin>>a[i][j];
    for(i=0;i        cin>>b[i];
    f=m-1;
    g=0;
    for(i=0;i        p(f,g,b[i]);
cout<<"\n"<return 0;
}

剛剛測試加上cout.tie(0);變成(2ms,364kb),因為輸出大,加上這句可增加效率

 
ZeroJudge Forum