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

A.Archmage

题意:法师有能量 n ,每秒可以花费 x 释放一次技能,有两种基本技能,花费x能量释放一次技能,每秒会自动恢复y能量, m 秒内能最多放几次技能

题解:x + y ≤ n  如果有 x ≤ y, 则他显然每秒都能释放一次技能,如果有 x > y, 则前 m -1 秒内恢复的魔法值都可以被利用上

        答案为   

 

总结:做题的时候思路是有的,但是实现的时候有一个点过不了,应该是实现的方法有问题

 

#include<iostream>
#include<string>
#include<cstring> 
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
int main(){
    ios::sync_with_stdio(false);
    int t;
    cin>>t;
    while(t--){
     ll n,m,x,y,counts=0,temp=0;
     cin>>n>>m>>x>>y;
     temp=floor((n+(m-1)*y)/x);
     cout<< min(temp,m)<<endl;
     }
    return 0;
 }
View Code

C. Cheat Sheet

题意:你有一张能最多写 n 个字符的纸,m 个可能重复的单词,你需要挑选一些不重复的写到纸上,单词之间必须用空格分隔,问最多能写下几个不同的单词

题解:保留不同的字符串,再对字符串的长度进行排序

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cstdio>
#include<cmath>
#include<set>
using namespace std;
set<string>a;
int len[1005];
int main(){
    string  str[1005];
    int n,m,sum=0,counts=0,flag;
    cin>>n>>m;
    for(int i=0;i<m;i++){
        cin>>str[i];
        a.insert(str[i]);
    }
    for(set<string>::iterator it=a.begin();it!=a.end();it++){
            string s=*it;
            len[counts]=s.length();
            counts++;
        }
    sort(len,len+counts);
    flag=counts;
    for(int i=0;i<counts;i++){
         sum+=len[i]+1;
         if(sum-1>n){
             flag=i;
             break;
         }
    }
        cout<<flag<<endl;
        return 0;
} 
View Code

 

posted @ 2020-06-09 19:24  Endeavo_r  阅读(165)  评论(0)    收藏  举报