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;
}
Keyboard

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;
}
Trains

 

posted @ 2020-12-05 15:01  逍遥此身君子意  阅读(88)  评论(0)    收藏  举报