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;
}
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),因為輸出大,加上這句可增加效率