zcmu——2204 Keyboard(模擬)
阿新 • • 發佈:2018-11-16
題意就是給出的鍵盤中都是小寫字母
然後給出一串字串
計算用到另一隻手的最少次數
大寫的字母如果在shift鍵以x為邊長的正方形周圍
就可以用一隻手搞定
然後如果是鍵盤中沒有的字母或者打不出大寫的字母
就輸出-1
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cstdlib> #include <map> #include <list> #include <vector> #include <stack> #include <queue> #include <algorithm> #include <iostream> using namespace std; map<int,int> m1,m2; char a[35][35]; char b[500010]; int main() { int n,m,x; scanf("%d%d%d",&n,&m,&x); for(int i=0;i<n;i++) { scanf("%s",a[i]); } bool flag1=false; bool flag2=false; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(a[i][j]=='S') { flag1=true; for(int c=0;c<n;c++) { for(int d=0;d<m;d++) { if((c-i)*(c-i)+(d-j)*(d-j)<=x*x&&a[c][d]!='S') m1[a[c][d]-'a']=1; } } } else m2[a[i][j]-'a']=1; } } int cnt=0; int y; scanf("%d%s",&y,b); for(int i=0;i<y;i++) { if(b[i]>='A'&&b[i]<='Z') { if(!flag1) { flag2=true; break; } if(m1[b[i]-'A']!=0){} else if(m2[b[i]-'A']!=0) cnt++; else { flag2=true; break; } } else if(m2[b[i]-'a']) {} else { flag2=true; break; } } if(flag2) puts("-1"); else printf("%d\n",cnt); return 0; }