#39023: c++(2ms, 344KB)單純測試,發現scanf和printf效率更高


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:39

單純測試哪種效率高,ios::sync_with_stdio(0);    cin.tie(0);-->3ms,360kb,ios::sync_with_stdio(0);    cin.tie(0);cout.tie(0); -->2ms,364kb,scanf printf -->(2ms, 344KB)。總結下來scanf printf的IO效率高,這題因為輸出量大ios::sync_with_stdio(0);    cin.tie(0);cout.tie(0);,效率第二。

解題思路:    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]);
printf("%c",a[c][d]);
f=c;
g=d;
}
int main()
{
        scanf("%d%d%d",&m,&n,&k);
    for(i=0;i<m;i++)

        scanf("%s",&a[i]);
    for(i=0;i<k;i++)
        scanf("%d",&b[i]);
    f=m-1;
    g=0;
    for(i=0;i<k;i++)
        p(f,g,b[i]);
        printf("\n%d\n",s.size());
return 0;
}

 
ZeroJudge Forum