Codeforces Beta Round #73(Div2)

A - Chord

 题意:给定3个音符判断是大三重奏还是小三重奏。

题解:因为给定的数很少,所以其实只要把他们都枚举出来排列下就好。

代码:

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <map>
using namespace std;
const int maxn=1000+5;
map<string,int>m;
int judge(string a,string b,string c)
{
    int x=(m[b]-m[a]+12)%12;
    int y=(m[c]-m[b]+12)%12;
    int z=(m[c]-m[a]+12)%12;
    if(x==4&&y==3&&z==7) return 1;
    if(x==3&&y==4) return 0;
    return -1;
}
int main()
{
    m["C"]=1;
    m["C#"]=2;
    m["D"]=3;
    m["D#"]=4;
    m["E"]=5;
    m["F"]=6;
    m["F#"]=7;
    m["G"]=8;
    m["G#"]=9;
    m["A"]=10;
    m["B"]=11;
    m["H"]=12;
    string a,b,c;
    cin>>a>>b>>c;
    if(judge(a,b,c)==1||judge(a,c,b)==1||judge(b,a,c)==1||judge(b,c,a)==1||judge(c,a,b)==1||judge(c,b,a)==1)
         cout<<"major";
    else if(judge(a,b,c)==0||judge(a,c,b)==0||judge(b,a,c)==0||judge(b,c,a)==0||judge(c,a,b)==0||judge(c,b,a)==0)
         cout<<"minor";
    else cout<<"strange";
    return 0;
}

B - Keyboard

 题意:就是给出的键盘中都是小写字母,然后给出一串字符串计算用到另一只手的最少次大写的字母,如果在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;
}
 

 

posted @ 2020-12-06 21:51  liyongqishiwo  阅读(51)  评论(0编辑  收藏  举报