首页 > 其他分享 >Codeforces Round 980 (Div. 2)

Codeforces Round 980 (Div. 2)

时间:2024-10-20 20:45:17浏览次数:1  
标签:tmp le 柠檬汁 int 980 Codeforces 按钮 Div 售货机

糖丸了,什么沟史比赛

A.Profitable Interest Rate

初始有 \(a\) 个硬币,可以花费硬币开通盈利账户与非盈利账户

  • 开通盈利账户需要至少花费 \(b\) 个金币
  • 开通非盈利账户没有限制
  • 每在非盈利账户花费 \(x\) 元,盈利账户的限制 \(b\) 就减少 \(2x\) 元

求最大的在盈利账户上的花费

设盈利花费 \(x\) 元

  • \(x\ge b-2(a-x)\),即 \(x\le 2a-b\)
  • \(0\le x\le a\)

根据这两个条件选择最大的 \(x\) 值即可

#include<bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(false);
    int t;cin>>t;while(t--){
        int a,b;cin>>a>>b;
        int tmp=2*a-b;
        tmp=max(0,tmp);
        tmp=min(a,tmp);
        cout<<tmp<<'\n';
    }
}

B.Buying Lemonade

有一些按钮和一些售货机,你知道每个售货机装的柠檬汁数量,但是你不知道哪个按钮对应哪个售货机
你可以进行如下操作

  • 选一个按钮按下去,如果这个按钮对应的售货机里还有柠檬汁,你就会得到一瓶,否则你什么都不会得到

求出买 \(k\) 瓶柠檬汁所需的最小按按钮次数

注意你可以根据售货机的情况调整结果,比如如果你按一个按钮没有得到柠檬汁,那么你就不会再按这个按钮了

\(N\le 2\times 10^5\)

模一组数据,比如 1 1 5 3 3,首先你知道所有的售货机里的柠檬汁都不少于一个,因此你应该先把每个按钮都按一次,然后你会去尝试哪个是空的,假如你足够倒霉,两个 1 都试出来了,那么你就可以确定剩下的售货机里的剩余柠檬汁都不少于 \(2\) 个,所以把每个非空的按钮按两遍,以此类推

模拟这个过程即可,排序后开桶存储

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[200001];
struct node{
    int cnt,val;
};
vector<node>v;
signed main(){
    ios::sync_with_stdio(false);
    int t;cin>>t;while(t--){
        int n,k;
        cin>>n>>k;
        for(int i=1;i<=n;++i){
            cin>>a[i];
        }
        sort(a+1,a+n+1);
        v.clear();
        for(int i=1;i<=n;++i){
            if(v.empty()) v.push_back({1,a[i]});
            else if(v.back().val==a[i]) v.back().cnt++;
            else v.push_back({1,a[i]});
        }
        int tot=0,cost=0,lst=0,rem=n;
        for(node i:v){
            int tmp=(i.val-lst)*rem;
            if(tot+tmp>=k){
                cost+=k-tot;
                break;
            }
            tot+=tmp;
            lst=i.val;
            cost+=tmp+i.cnt;
            rem-=i.cnt;
        }
        cout<<cost<<'\n';
    }
}

C.Concatenation of Arrays

给你 \(N\) 个数对,你需要把数对首位拼接起来,最小化逆序对个数

\(N\le 10^5\)

看上去很对的假了的做法:

注意到两个数对交换对全局没有影响,因此写一个 cmp 比较两个数对拼接后的最优拼法,直接排序后输出

看上去很假的对了的做法:

将数对按最大值排序,相等则按最小值排序

不知道为啥这个对了,看上去确实是比较对,等题解出了补一下证明

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
pair<int,int> a[100001];
int c[5];
bool cmp(pair<int,int>a,pair<int,int>b){
    if(max(a.first,a.second)==max(b.first,b.second))
    return min(a.first,a.second)<min(b.first,b.second);
    return max(a.first,a.second)<max(b.first,b.second);
}
signed main(){
    ios::sync_with_stdio(false);
    int t;cin>>t;while(t--){
        cin>>n;
        for(int i=1;i<=n;++i){
            cin>>a[i].first>>a[i].second;
        }
        sort(a+1,a+n+1,cmp);
        for(int i=1;i<=n;++i){
            cout<<a[i].first<<' '<<a[i].second<<' ';
        }
        cout<<'\n';
    }
}

D.Skipping

P10381

标签:tmp,le,柠檬汁,int,980,Codeforces,按钮,Div,售货机
From: https://www.cnblogs.com/HaneDaCafe/p/18487790

相关文章

  • Codeforces Round 977 (Div. 2)
    一万一参赛,赛时排名151A.MeaningMean简单贪心题。显然,排在越后面的数,除以2的次数越少。因此贪心地从小到大计算结果即为答案。#include<bits/stdc++.h>usingnamespacestd;constintN=55;intT,n,a[N];intmain(){ scanf("%d",&T); while(T--){ scanf......
  • Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) A-C1
    ​A.MeaningMean2024.10.17算法:模拟,贪心思路:居然时没看题解直接做出来的T^T贪心:题目要求最后剩下的一个数,使得最大那么我们从这个最大的最后一个数思考,最后一个数肯定时由最后两个数进行相加,再除以2,同时上下取整而得到的。方便陈述,我们设最大的最后一个数,也就是最终答案......
  • 【并查集+dfs】codeforces 1833 E. Round Dance
    题意输入一个正整数\(T(1\leqT\leq10^4)\),表示接下来输入\(T\)组测试用例,对于每一个测试用例:第一行,输入一个正整数\(n(2\leqn\leq2*10^5)\)第二行,输入\(n\)个正整数\(a_i(1\leqa_i\leqn)\),表示节点\(i\)到节点\(a_i\)存在一条有向边,保证无自环这\(n......
  • 【LGR-203-Div.4】洛谷入门赛 #28
    【LGR-203-Div.4】洛谷入门赛#28\(A\)luoguB4042[语言月赛202410]顺序结构\(AC\)顺序结构。点击查看代码intmain(){lla;cin>>a;cout<<3*(5+a)<<""<<3*a+5<<endl;return0;}\(B\)luoguB4043[语言月赛202410......
  • Educational Codeforces Round 166 (Rated for Div. 2) - VP记录
    比赛链接A.VerifyPassword挨个判断即可,秒了。#include<cstdio>#include<cstring>usingnamespacestd;constintN=25;intT,n;charstr[N];boolis_digit(charch){returnch>='0'&&ch<='9';}boolis_lowercase(charch){re......
  • Codeforces Round 892 (Div. 2)题解记录
    题目链接:https://codeforces.com/contest/1859A.UnitedWeStand选最大的数即可注意题目输出格式 #include<iostream> #include<string.h> #include<map> #include<vector> #include<set> #include<unordered_set> #include<stack> #incl......
  • python: invalid value encountered in divide以及invalid value encountered in doub
    运行命令pythoneqtl_prepare_expression.pydata.tpm.gctdata.reads_count.gct--tpm_threshold0.1--count_threshold2--sample_frac_threshold0.2--normalization_methodtmm--outputdata.txt时出现了报错“invalidvalueencounteredindivide”以及“invalidvalue......
  • Div3
    CF1893A题目描述有以下操作:选择数组\(A\)的一个固定点\(x\)。固定点是指满足\(A_x=x\)的点。令\(A\)循环左移\(x\)次。求数组\(B\)有没有可能是通过某个\(A\)执行\(k\)次操作得到的。思路可以发现,上次选择的固定点\(x\)一定被转到了最后面。按题意模......
  • Codeforces Round 893 (Div. 2)题解记录
    题目链接:https://codeforces.com/contest/1858A.Buttons从自身角度出发,我想赢就得保证我的按钮尽可能多所以,大家都优先按\(c\),然后分析先后顺序即可 #include<iostream> #include<string.h> #include<map> #include<vector> #include<set> #include<unordered_set> #......
  • Codeforces Round 924 (Div. 2) D. Lonely Mountain Dungeons(推式子,思维,差分,前缀和)
    题目链接CodeforcesRound924(Div.2)D.LonelyMountainDungeons思路令f(n,m......