Codeforces #753 A. Linear Keyboard解題 自我思路
阿新 • • 發佈:2021-12-06
原題連結:
題目大意:
給定一個特殊的只有一行的鍵盤,每一步只能移動一個鍵位 (可以同時完成移動和敲擊按鍵的動作),給定一個只有小寫字母構成的字串,輸出 要輸出該字串所需要的最少步數
輸入的格式:
輸入 t 代表有 t 組實驗資料
隨後輸入 2t 行資料
第一行為 鍵盤的格式
下一行為給出的字串
例如:
5
abcdefghijklmnopqrstuvwxyz
hello
abcdefghijklmnopqrstuvwxyz
i
abcdefghijklmnopqrstuvwxyz
codeforces
qwertyuiopasdfghjklzxcvbnm
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
qwertyuiopasdfghjklzxcvbnm
abacaba
輸出的格式:
接上面的例子
13
0
68
0
74
思路展示:
首先定義出 int 的 t
製造FOR迴圈來滿足題目多組輸入的要求
int main (){
int t,j,k,i;
scanf("%d",&t);
for(i = 0;i<t;i++)
然後以:“abcdefghijklmnopqrstuvwxyz“ 為例
創造兩個 char型別的陣列,分別讀入鍵盤和目標字串
char a[26],b[50];
scanf("%s",&a);
scanf("%s",&b);
隨後定義一個新的陣列,長度與 b 陣列相同,用來記錄 b 數組裡的字元在 a 陣列的下標
實現程式碼如下:
m=strlen(b);
int c[m];
for(i=0;i<m;i++)
{
for(j=0;j<26;j++)
{
if(b[i]==a[j]) c[i]=j;
}
}
然後利用 c 數組裡記錄的字元的地址來運算步數,最後相加(別忘了絕對值)
int s=0;
for(i=0;i<m-1;i++)
{
s=s+fabs(c[i+1]-c[i]);
}
整體程式碼如下:
#include<stdio.h> #include<string.h> #include<math.h> int main() { int i,m,j,t,q; scanf("%d",&t); for(q=0;q<t;q++){ char a[26],b[50]; scanf("%s",&a); scanf("%s",&b); m=strlen(b); int c[m]; for(i=0;i<m;i++) { for(j=0;j<26;j++) { if(b[i]==a[j]) c[i]=j; } } int s=0; for(i=0;i<m-1;i++) { s=s+fabs(c[i+1]-c[i]); } printf("%d\n",s); } }