2020/12/20

A - Insomnia cure

题意:总共有d条龙,每隔k,l,m,n就会有一条龙受到伤害,求一共有都少龙受到伤害

题解:从1到d循环判断,如果(i%k==0||i%l==0||i%m==0||i%n==0)   cnt++

#include<algorithm> 
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
using namespace std;
int main(){
    int k,l,m,n,d;
    int cnt=0;
    cin>>k>>l>>m>>n>>d;
    for(int i=1;i<=d;i++){
        if(i%k==0||i%l==0||i%m==0||i%n==0){
            cnt++;
        }
    }
    cout<<cnt<<endl;
    return 0;
}
 
View Code

 B - Escape

题意:公主从龙的洞穴中逃跑,公主的速度为vp,龙的速度为vd。公主逃跑时间 t 后,龙开始追公主。龙一旦追上公主,公主就丢弃一块宝石,龙拿起物拿起物品,回到洞穴,花f小时来清理。然后再去追公主,当公主离洞穴距离大于等于c的时候就安全了,求公主在逃跑过程中需要丢弃的宝石数

 

题解:当vp>=vd时,龙追不上公主;当vp<vd时,设经过t1时间追上公主,则初始状态t1=(vp*t*1.0)/(vd-vp);公主和龙的距离为ans=vd*t1,扔下宝石,龙返回洞穴花费时间t1,整理花费时间f; 再次从洞穴追上公主花费时间t2,t2=(ans+vp*f+vp*t1)/(vd-vp),ans=vd*t2;以此类推直到c>=ans

#include<algorithm> 
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
using namespace std;
int main(){
    int vp,vd,t,f,c,l;
    cin>>vp>>vd>>t>>f>>c;
    double t1,t2,ans=0,cnt=0;
    if(vp>=vd){
        cout<<0<<endl;
        return 0;
    }
    t1=(vp*t*1.0)/(vd-vp);
    ans=vd*t1;
    t2=(ans+vp*f+vp*t1)*1.0/(vd-vp);
    while(ans<c){
        cnt++;    
    /*    t2=(ans+vp*f+vp*t1)*1.0/(vd-vp);
        ans+=vp*f+vp*t1;
        t1=ans*1.0/(vd-vp);
        ans=vd*t2;
    */
        ans+=vp*f+vp*t1;
        t2=ans*1.0/(vd-vp);
        t1=ans*1.0/(vd-vp);
        ans=vd*t2;
    }
    cout<<cnt<<endl;
}
 
View Code

 

C - Terse princess

 题意:有个公主找王子,如果这个王子比之前所有王子的财富都多,公主就会Oh,如果这个王子比之前所有王子的财富的总和加起来还多,就会Wow,(Wow和Oh不会同时发生),构造一个长度为n的序列,要求有a个Oh,b个Wow,如果不存在输出-1;

 题解:当b=0时,如果a+1=n,输出-1.因为一定存在第二个数大于第一个数的情况,满足输出WOW的情况

     若b!=0,先把满足Wow的b个数构造出来,先输出1,构造等比数列2,4,8….(这样可以满足这个数比他之前所有数的和都大);在构造满足Oh的a个数,使每个数比他前面那个数多1;剩下n-a-b个数与他前面的数相等 

   如果b=0,先输出1;为了保证有a个 Oh,没有Wow, 再输出一个数字1;再构造满足Oh的a个数,同上

#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdio>
using namespace std;
int c[110];
int main(){
    int n,a,b;
    cin>>n>>a>>b;
    if(b==0&&a&&a+1==n){
        cout<<-1<<endl;
        return 0;
    }
    cout<<1<<" ";
    for(int i=1;i<=n-1;i++){
        if(b==0&&i==1){//b=0,如果是1 2的话会出现WOW,1 1 2 3 ... 就不会 
            c[1]=1;
            cout<<1<<" ";
            a++;
            continue;
        }
        if(i<=b){
            c[i]=pow(2,i);
        }else if(i<=a+b){
            c[i]=c[i-1]+1;
        }else{
            c[i]=c[i-1];
        }
        cout<<c[i]<<" ";
    }
    cout<<endl;
}
View Code

 

posted @ 2020-12-27 11:47  Endeavo_r  阅读(246)  评论(0)    收藏  举报