Educational Codeforces Round 118 (Rated for Div. 2)

A :Long Comparison

题目就是给你 2个数字  每一个数字后面跟着多少个零 比较大小

思路就是直接用字符串比较

#include "bits/stdc++.h"
using namespace std;
int t;
int a,b,q,w;
int main()
{
    cin >> t;
    while (t--){
        cin >> a >> q;
        cin >> b >> w;
        while (a){
            int x = a%10;
            if(x!=0) break;
            else q++;
            a/=10;
        }
        while (b){
            int x = b%10;
            if(x!=0) break;
            else w++;
            b/=10;
        }
        string x= to_string(a) , y = to_string(b);
        int len = x.size() + q , len1 = y.size() + w;
        if(len == len1){
            if(x > y) cout << '>' << endl;
            else if(x == y) cout << '=' << endl;
            else cout << '<' << endl;
        }else if(len > len1) cout << '>' << endl;
        else cout << '<' << endl;


    }

    return 0;
}

B :Absent Remainder

题目给你t组样例 每一组用不同的元素取模 取出你这一没有的元素 ,那么这俩个不同数字成立,思路就是用最大数取最小数 ,那么取模出来的数字肯定比你数组中的数字还要小

#include "bits/stdc++.h"

using namespace std;
const int N = 2e5+5;
int t,n;
int s[N];
int main()
{
    cin >> t;
    while (t--)
    {
        cin >> n;
        for(int i=1;i<=n;i++){
            cin >> s[i];
        }
        sort(s+1,s+1+n);
        set<pair<int,int>>se;
        for(int i=n;i>=2;i--){
            se.insert({s[i],s[1]});
            if(se.size() == n/2) break;
        }
        for(auto i : se){
            cout << i.first << " " << i.second << endl;
        }
    }

    return 0;
}

C:Poisoned Dagger

t组样例,给你n和h , n里面的每一个数字是什么时候必须打恶龙,而h是恶龙的生命

让你用最小的固定伤害杀死恶龙,每一秒恶龙只能掉一滴血,然后重新使用毒药会重置毒药时间

解题思路:二分搜索        由于第i次攻击的毒药对i<n的伤害为min(k,ai+1−ai)秒,我们可以看到,k的值越大,总和就越大

#include "bits/stdc++.h"
#define ll long long
using namespace std;
int t,n;
ll s[105];
ll h,l,r;
int main()
{
    cin >> t;
    while (t--)
    {
        cin >>  n >> h;
        for(int i=1 ;i<=n;i++) cin >> s[i];
        l = 1 , r=1e18;
        while (l<=r)
        {
            ll mid = (l+r)>>1;
            ll sum = mid;
            for(int i=1 ; i<n ; i++){
                sum+= min(s[i+1]-s[i],mid);
            }
            if(sum < h) l=mid+1;
            else r=mid-1;
        }
        cout << r+1 << endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值