UCF Local Programming Contest 2017 解题和补题报告

A题分两部分,小于1000和大于1000算出来在相加就可以。

B题是给两个字符串和字母的顺序,判断每一位对应的字符是否是相同或相邻或不相邻,我是讲字符放在一个二维数组里,判断的时候是找到一个的位置,然后在找它旁边的九个位置,如果都没有就不是相邻,有就是相邻。代码:

#include<bits/stdc++.h>
using namespace std;
char mp[3][9]={{'a','b','c','d','e','f','g','h','i'},{'j','k','l','m','n','o','p','q','r'},{'s','t','u','v','w','x','y','z','0'}};
int find(char a,char b)
{
    int x,y;
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<9;j++)
        {
            if(mp[i][j]==a)x=i,y=j;
        }
    }
    for(int i=x-1;i<=x+1;i++)
    {
        if(i<0||i>2)continue;
        for(int j=y-1;j<=y+1;j++)
        {
            if(j<0||j>8)continue;
            if(b==mp[i][j])return 1;
        }
    }
    return 0;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        string s,c;
        cin>>s>>c;
        int flag=0;
        if(s.length()!=c.length())flag=3;
        else if(s==c)flag=1;
        else{
            flag=2;
            int l=s.length();

            for(int i=0;i<l;i++)
            {    
                if(find(s[i],c[i])==0)
                {
                
                    flag=3;
                    break;
                }
            }    
        }
    cout<<flag<<endl;
    }
}

C题就是遍历一遍,判断前一个和后一个的差的绝对值是否比总的减去这个绝对值大,取小的那个,注意的是每次播放完就要在加一,代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        LL a,b;
        cin>>a>>b;
        vector<int>p;
        p.clear();
        int n;
        for(int i=0;i<b;i++)
        {
            cin>>n;
            if(i==0)++n;
            p.push_back(n);
        }
        LL ans=0;
        for(int i=1;i<b;i++)
        {
            ans+=min((LL)abs(p[i]-p[i-1]),a-abs(p[i]-p[i-1]));
            ++p[i];
        }
        cout<<ans<<endl;
    }
}

D题,好久没用bfs都忘得差不多了,所以当时也没想到是bfs,就没做出来,赛后看的题解,在当前的地方上下左右搜索,找到最短的步数即可;

E题,用三角函数判断飞镖落在哪片区域,在判断他们到落点的距离,在将他们相加即可。

猜你喜欢

转载自www.cnblogs.com/Kingstar1/p/12668586.html