首页 > 其他 > 详细

UCF Local Programming Contest 2014题解

时间:2020-07-02 22:59:49      阅读:645      评论:0      收藏:0      [点我收藏+]

A. Vowel Count(模拟)

思路:

按照题意统计元音字母个数模拟即可

技术分享图片
#include<iostream>
#include<algorithm>
 using namespace std;
 int main()
 {
    int t;
    cin>>t;
    while(t--){
        string s;
        cin>>s;
        int num=0;
        int len=s.size();
        for(int i=0;i<len;i++)
            if(s[i]==a||s[i]==e||s[i]==i||s[i]==o||s[i]==u)
                num++;
        cout<<s<<endl;
        if(num>len-num) cout<<1<<endl;
        else cout<<0<<endl;
    }
    return 0;
 }
View Code

B. Soccer Standings(暴力枚举)

思路:

暴力枚举赢的次数跟输的次数,再判断得分是否合法

技术分享图片
#include<iostream>
#include<algorithm>
 using namespace std;
 int main()
 {
     int t,n,m;
     cin>>t;
     for(int i=1;i<=t;i++){
         cin>>n>>m;
         cout<<"Team #"<<i<<endl;
         cout<<"Games: "<<n<<endl;
         cout<<"Points: "<<m<<endl;
         cout<<"Possible records:"<<endl;
        for(int i=m/3;i>=0;i--){
            if(i+m-3*i<=n) 
                cout<<i<<"-"<<m-3*i<<"-"<<n-(i+m-3*i)<<endl;
            else break;
        }
        cout<<endl; 
     }
    return 0;
 }
View Code

C. Jumping Frog(贪心)

思路:

先判断不可行的情况,如果有连续长度大于$d$的$X$,则无法通过

之后进行贪心求最小值,假设我们的当前位置为$pos$,那么我们可以从$pos+d+1$这个点开始往回找第一个为$.$的位置,这一次跳跃操作就跳至那里

不断进行前面的操作,就可以求出最小值

技术分享图片
#include<iostream>
#include<algorithm>
using namespace std;
int t,n,d;
string str;
int main(){
    cin>>t;
    for(int cas=1;cas<=t;cas++){
        cin>>n>>d>>str; 
        cout<<"Day #"<<cas<<endl;
        cout<<n<<" "<<d<<endl;
        cout<<str<<endl;
        int cnt=0;
        for(int i=0;i<str.size();i++){
            if(str[i]==X){
                int j;
                for(j=i;j<str.size();j++) if(str[j]!=X) break;
                if(j-i>d) {
                    cnt=-1;
                    break;
                }
                i=j;
            }
        }
        if(cnt!=-1)
        for(int i=0;i<str.size();){
            if(i+d+1>=str.size()-1) {
                cnt++;
                break;
            }    
            if(str[i+d+1]==.) i=i+d+1,cnt++;
            else{
                int j;
                for(j=i+d+1;j>=i;j--) 
                    if(str[j]==.) break;
                i=j;cnt++;
            } 
        }
        cout<<max(cnt,0)<<endl<<endl;
    } 
}
View Code

 D. Fujiyama Thursday(贪心)

思路:

根据贪心的思想,吃饭越快的人肯定坐越快的车,所以我们将每个人吃饭的时间加上坐车的时间排序后去最大值就好了

技术分享图片
#include<iostream>
#include<algorithm>
 using namespace std;
 const int maxn=1e3+10;
 int a[maxn],b[maxn];
 int main()
 {
     int t,c,n;
     cin>>t;
     for(int cas=1;cas<=t;cas++){
         cin>>c;
         n=4*c;
         for(int i=1;i<=c;i++) cin>>a[i];
         for(int i=1;i<=n;i++) cin>>b[i];
         sort(a+1,a+1+c);
         sort(b+1,b+1+n);
         reverse(b+1,b+1+n);
         for(int i=1;i<=n;i++){
             b[i]+=a[(i-1)/4+1];
         }
        sort(b+1,b+1+n);
        cout<<"Trip #"<<cas<<": "<<b[n]<<endl;
     }
    return 0; 
 }
View Code

 

UCF Local Programming Contest 2014题解

原文:https://www.cnblogs.com/overrate-wsj/p/13227633.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!