UCF Local Programming Contest 2017(2020-4-6)

A. Electric Bill

解题思路:电量分级收费,判断是否大于1000,分别计算两部分的钱,求和输出。

AC代码:

#include<cmath>
#include<cstdio>
#include<algorithm>
#include <string>
#include<vector>
#include<iomanip>
#include<iostream>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    int n;
    cin>>n;
    while(n--){
        int c,d;
        cin>>c;
        cout<<c<<" ";
        if(c<=1000){
            d=c*a;
        }else{
        d=1000*a+(c-1000)*b;
        }
        cout<<d<<endl;
    }

    return 0;
}

B. Simplified Keyboard

解题思路:给出一个字母分布图如果两个字符串对应位置的字母全都相等字符串属性为1,否则若两个字符串对应位置字母均相邻或相等,字符串属性为2,否则字符串属性为3.

 

 

 

AC代码:

#include<cmath>
#include<cstdio>
#include<algorithm>
#include <string>
#include<vector>
#include<iomanip>
#include<iostream>
using namespace std;
int main(){
    int n,i,a,b;
    string s1,s2;
    cin>>n;
    for(i=0;i<n;i++){
        cin>>s1>>s2;
        a=s1.length();
        b=s2.length();
        if(s1.compare(s2)==0){//判断是否相等,相等则为1
            cout<<"1"<<endl;
        }
        else if(a==b){
            int p=0;
            for(int j=0;j<a;j++){//遍历字符串并比较对应位置
                if(s1[j]!=s2[j]&&s1[j]!=s2[j]-1&&s1[j]!=s2[j]+1&&s1[j]!=s2[j]-8
                &&s1[j]!=s2[j]-9&&s1[j]!=s2[j]-10&&s1[j]!=s2[j]+9&&s1[j]!=s2[j]+10&&s1[j]!=s2[j]+8){
                    p=1;
                    break;
                }
            }
            if(p==0)
                cout<<"2"<<endl;
            if(p==1)
                cout<<"3"<<endl;
        }
        else{//长度不相等,则为3
            cout<<"3"<<endl;
        }
    }
    return 0;
}

C. Singin' in the Rain

解题思路:对于每个样例,第一行输入CD上歌曲的总数 t 和Anya想听的歌曲的数量 s ,第二行输入s个歌曲所在的位置,逐个计算每次切换需要按键的数量

AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
int main(){
    
    int n,flag;
    int s,i,j,first,next;
    long long t;
    cin>>n;
    for(i=1;i<=n;i++){
        cin>>t>>s;
        long long sum=0;
        cin>>first;//初始位置
        for(j=1;j<=s-1;j++){
            cin>>next;
            flag=next-first-1;//已经播放到末尾了,-1
            if(flag<0){
                 flag=-flag;
            }
            if(flag<t-flag){//比较往前调还是往后调小呗
                sum+=flag;
            }else{
                sum+=t-flag;
            }
            first=next; 
        }
        cout<<sum<<endl;
    }
       return 0;
}

E. Simple Darts

解题思路:掷飞镖,落在第一个圆内得50分,第二个圆内积分双倍,第三个圆内单倍,根据X轴正上方逆时针旋转,在第几个扇形中就得几分

AC代码:

#include <cmath>
#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
    double w,b,d,s,k,n;
    cin>>k;
    while(k--){
        cin>>w>>b>>d>>s>>n;
        double count=0;
        int a;
        while(n--){
            double x,y;
            cin>>x>>y;
            double len=sqrt(x*x+y*y);
            double jd;
            if(len<=b){
                count+=50;
            }else if(len<=d){
                jd=atan2(y,x)/(2*acos(-1))*360;
                if(jd<0){
                    jd=180+(180+jd);
                }
                a=jd/(360/w)+1;
                count+=a*2;
            }else if(len<=s){
                jd=atan2(y,x)/(2*acos(-1))*360;
                if(jd<0){
                    jd=180+(180+jd);
                }
                a=jd/(360/w)+1;
                count+=a;
            }
        }
        cout<<count<<endl;
    }
    return 0;
}

https://www.jisuanke.com/contest/7195

猜你喜欢

转载自www.cnblogs.com/a-specter/p/12668678.html