12.03队内练习赛补题
B:Keyboard
题目链接:https://vjudge.net/contest/411357#problem/B
解题思路:给出的键盘中都是小写字母,然后给出一串字符串,计算用到另一只手的最少次数。大写的字母如果在shift键以x为边长的正方形周围,就可以用一只手搞定,然后如果是键盘中没有的字母或者打不出大写的字母就输出-1。
代码:
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <map> #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) { continue; } else if(m2[b[i]-'A']!=0) { cnt++; } else { flag2=true; break; } } else if(m2[b[i]-'a']) { continue; } else { flag2=true; break; } } if(flag2) puts("-1"); else printf("%d\n",cnt); return 0; }
C:Trains
题目链接:https://vjudge.net/contest/411357#problem/C
解题思路:输入a,b,当时间t%a==0时,Vasya去见Dasha;当t%b==0时,Vasya去见Masha;当t%a==0&&t%b==0时,Vasya去见见面次数比较少的女朋友。输出见面次数较多的女朋友的名字。
代码:
#include<cstdio> #include<cstring> #include<cmath> #include<string> #include<iostream> #include<algorithm> using namespace std; int fi,se; int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } int main() { while(~scanf("%d%d",&fi,&se)) { int r=gcd(fi,se); long long res= 1ll * fi / r * se ; int t1=res/fi; int t2=res/se; if(t1>t2 ) t2++; else if( t2 > t1 ) t1++; if(t1 == t2 ) printf("Equal\n"); else if( t1 > t2) printf("Dasha\n"); else printf("Masha\n"); } return 0; }

浙公网安备 33010602011771号