Codeforces Round #592 Div. 2

本文介绍了Codeforces Round #592 Div. 2的比赛题目,包括Pens and Pencils的背包问题、Rooms and Staircases的最远房间数贪心算法、The Football Season的数学解题方法、Paint the Tree的树着色策略、Minimizing Difference的数组操作优化、Chips的环形颜色变化规律以及Running in Pairs的竞赛安排策略。
摘要由CSDN通过智能技术生成

1244A Pens and Pencils
题意:给定a,b,c,d,k。有两种物品,一个物品1的价值是c,物品2的价值是d。背包容量至多可以装k个物品。问有没有装物品的方案使得物品1的价值至少位a,物品2的价值至少位b。有输出合法的一种,没有输出-1.
题解:直接求

#include<bits/stdc++.h>
using namespace std;

int main(){
   
    int t;
    int a,b,c,d,k;
    cin>>t;
    while(t--){
   
        cin >> a >> b >> c >> d >> k;
        int pen = a / c + (a % c != 0);
        int pencil = b / d + (b % d != 0);

        if(pen + pencil > k){
   
            puts("-1");
        }else{
   
            cout<<pen<<" "<<pencil<<endl;
        }
    }
    return 0;
}

1244B Rooms and Staircases
题意:Nikolay 有个两层楼的房子,每层n个房间。每个房间和左右相邻房间有个门可以互通。一层和二层有一些梯子。有梯子的不同层房间可以互通。如下图。问Nikolay从任一房间开始,每次可以走到互通的房间中去,能到达的最大房间数。期间不能进入一个房子两次。在这里插入图片描述

题解:贪心。如果没有梯子,显然数目就是n。如果有一个梯子,那么就是拐一个弯,如下图。
如果有大于等于两个梯子。不难看出中间的可以不予考虑,最大的依然是考虑边缘的两个梯子,从一端开始,拐最长的弯。

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;

int main(){
   
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t, n;
    string s, s1;
    cin >> t;
    while(t--){
   
        cin >> n >> s;
        s1 = s;
        reverse(s1.begin(), s1.end());
        string::size_type pos1 = s.find('1');
        string::size_type pos2 = s1.find('1');

        if(pos1 == s.npos) cout << n << endl;
        else cout<< 2 * n - 2 * min(pos1, pos2) << endl;
    }
    return 0;
}

1244C The Football Season
题意:给定n,p,w,d
在这里插入图片描述
求解满足下式的非负整数x,y,z
在这里插入图片描述
题解:
相当于求
x ⋅ w + y ⋅ d = p x + y ≤ n x \cdot w + y \cdot d = p\\x+y \le n xw+yd=px+yn
如果有一组 x , y x,y x,y满足 x ⋅ w + y ⋅ d = p x \cdot w + y \cdot d = p xw+yd=p
x ⋅ w + y ⋅ d = x ⋅ w + ( ⌊ y / w ⌋ ⋅ w + y % w ) ⋅ d = ( x + ⌊ y / w ⌋ ⋅ d ) ∗ w + ( y % w ) d = p x\cdot w+y\cdot d = x\cdot w+(\lfloor y/w \rfloor \cdot w + y \%w)\cdot d =(x+ \lfloor y/w \rfloor \cdot d) * w + (y\%w) d =p xw+yd=xw+(y/ww+y%w)d=(x+y/wd)w+(y%w)d=p
x + ⌊ y / w ⌋ ⋅ d + y % w ≤ x + ⌊ y / w ⌋ ⋅ w + y % w = x + y x + \lfloor y/w \rfloor \cdot d + y \% w \le x+ \lfloor y/w \rfloor \cdot w + y \%w=x+y x+y/wd+y%w

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值