2020 年 “联想杯”全国高校程序设计在线邀请赛暨第三届上海理工大学程序设计竞赛(A~C)

A. Archmage

题意:这一题的大概意思是某个法师最多拥有的能力值为n,拥有两项基本的技能:

  花费x点的能力值释放一次技能

  每秒自动恢复y点能量值,最大不超过n

问在m秒内最多可以释放多少次的技能。

题解:这一题比较有意思,我们这样想:

  当恢复的速度大于消耗的速度有:每一秒都可以释放技能,则,ans=m

  当消耗的速度大于恢复的速度,则在(m-1)秒内恢复的能量值都可以被用上,则此时有:

    ans=min((n+(m-1)*y)/x,m);

  注意:暴力会超时,

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int main(){
    ll n,m,x,y;
    int t;
    cin>>t;
    while(t--){
        cin>>n>>m>>x>>y;
        ll t1=(n+(m-1)*y)/x;
        cout<<min(t1,m)<<endl;
    }
    return 0;
}

B. Bamboo Leaf Rhapsody

题意:题意简单。

题解:分别求sqrt(x*x+y*y+z*z)的最小值。

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long 
using namespace std;
int main(){
    int n;
    int x,y,z;
    cin>>n;
    double num[100000]={0};
    int t=0;
    for(int i=0;i<n;i++){
        cin>>x>>y>>z;
        double temp=sqrt(x*x+y*y+z*z);
        num[t++]=temp;
    }
    sort(num,num+t);
    printf("%.3lf\n",num[0]);
    return 0;
}

C. Cheat Sheet

题意:一张纸可以写入n个字符,给出m个字符串(可能有重复),两个字符串中有一个空格,问最后可以写上多少个不同的字符串。

题解:题意简单,简单计算即可,注意要去重,两个字符串中有一个空格即可。

代码:

#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
set<string> st;
int main(){
    int n,m;
    string ar;
    cin>>n>>m;
    for(int i=0;i<m;i++){
        cin>>ar;
        st.insert(ar);
    } 
    set<string>::iterator it = st.begin();
    int length[100000]={0},t=0;
    while(it!=st.end()){
        string ar=*it;
        it++;
        length[t++]=ar.length();
    }
    sort(length,length+t);//从小到大排列;
    int len_sum[100000]={0};
    len_sum[0]=length[0]; 
    for(int i=1;i<t;i++){
        len_sum[i]=length[i]+len_sum[i-1]+1;
    }
    //限制长度是n;
    int ans=0;
    for(int i=0;i<t;i++){
        if(len_sum[i]>n){
            break;
        }
        ans++;
    } 
    cout<<ans<<endl;
    return 0;
}

 

posted @ 2020-05-30 20:15  TheIT  阅读(248)  评论(0编辑  收藏  举报