首页 > 其他分享 >题解【CF798D Mike and distribution】

题解【CF798D Mike and distribution】

时间:2024-05-26 11:35:40浏览次数:18  
标签:Mike int 题解 back st ans push distribution id

题目链接

思考方向:构造方法满足 \(A\) 的要求,再满足 \(B\) 的要求。

如果只考虑 \(A\),有一种显然的方案:将 \(A\) 从大到小排序,选出前 \(\left \lfloor \frac{n}{2} \right \rfloor+1\) 大的即可。但这样显然难以扩展,所以需要另寻方案。

由于题目提供了额外的 \(+1\),所以先将最大的 \(A_1\) 选上,对于剩下的 \(A_2\sim A_n\),由于要满足二倍关系,不妨进行两两分组,即 \(A_2,A_3\) 一组,\(A_4,A_5\) 一组,依次类推。

这样会有一个结论:一组内任意选一个即可满足题目要求。

证明:
最坏的情况是,每组都选小的那个,即 \(A_3,A_5,A_7...\),那么最终总和(此处将选的数加上,不选的数减去,如果最终总和 \(>0\),则说明满足题目条件)为:\(A_1-A_2+A_3-A_4+A_5...-A_{n-1}+A_n\),但是 \(A_1>A_2,A_3>A_4...\),所以最后总和 \(>0\),满足条件。

所以对于 \(A\) 的每一组内,只需要在 \(B\) 的对应下标选出比较大的数(反正 \(A\) 怎么选都行),一直下去就可以得出答案。

代码:

#include<bits/stdc++.h>
using namespace std;
 
const int N=1e5+10;
int n;
struct node {
    int a,b,id;
}s[N];
 
int cmp(node x,node y) {
    if(x.a!=y.a) return x.a>y.a;
    else return x.b>y.b;
}
 
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
 
    cin>>n;
    for(int i=1;i<=n;i++) {
        cin>>s[i].a;
        s[i].id=i;
    }
    for(int i=1;i<=n;i++) cin>>s[i].b;
    sort(s+1,s+1+n,cmp);
    int st=0;
    vector<int> ans;
    if(n%2==0) {
        st=3;
        ans.push_back(s[1].id); ans.push_back(s[2].id);
    }
    else {
        st=2;
        ans.push_back(s[1].id);
    }
    for(;st<=n;st+=2) {
        if(s[st].b>s[st+1].b) ans.push_back(s[st].id);
        else ans.push_back(s[st+1].id);
    }
    sort(ans.begin(),ans.end());
    cout<<ans.size()<<endl;
    for(int a:ans) cout<<a<<" ";
    return 0;
}

标签:Mike,int,题解,back,st,ans,push,distribution,id
From: https://www.cnblogs.com/zhangyuzhe/p/18213444

相关文章

  • UVA1674 闪电的能量 Lightning Energy Report 题解
    题目传送门前置知识树链剖分|线段树解法树链剖分后维护一个支持区间修改,单点查询的线段树即可。也可以树上差分,同146.DFS序3,树上差分1的\(1,2\)操作,时间复杂度比树链剖分更优。代码#include<bits/stdc++.h>usingnamespacestd;#definelllonglong#define......
  • CF1141E Superhero Battle 题解
    题目传送门简化题意给定\(H,n\)和一个长度为\(n\)的序列\(d\),求一个最小的\(m\)使得\(H+\sum\limits_{i=1}^{m}d_{(i-1)\bmodn+1}\le0\)。解法将式子移项后得到\(\sum\limits_{i=1}^{m}-d_{(i-1)\bmodn+1}\geH\)。将\(\sum\limits_{i=1}^{m}-d_{(i-1)\bmo......
  • SP14943 DRTREE - Dynamically-Rooted Tree 题解
    题目传送门前置知识树链剖分|线段树解法树剖换根,子树查询板子。类似换根DP的思路,我们发现换根后仅有祖先、子树、深度等会随祖先的变化而变化。设\(rt_{i}\)表示第\(i\)次操作的树根,\(x_{i}\)表示第\(i\)次操作的节点。接着进行大力分讨。当\(rt_{i}=x_{i}\)......
  • 图的dfs遍历题解
    本蒟蒻又来做题啦!看看今天做啥题。。。。题目描述时间:1s 空间:256M题目描述:给出一个无向图和一个起点s,输出这个图从s结点开始的DFS遍历序列。规定:节点邻居按照输入的顺序遍历输入格式:共M+1行。第11行包含33个正整数N,M,s,表示有N个点,M条边,起点为s。第2~M+1行包含2个用......
  • 【题解】 [USACO 2009 Mar] Cow Frisbee Team S
    题目描述题意分析从\(N\)个整数中取若干个(不能不选),且取的数之和为\(F\)的倍数的总方案数对\(10^8\)取余的值。思路这道题是一道二维线性DP。那么根据线性DP的解题方法。首先,找出题目的阶段性。这道题显而易见方案数随着选择的个数而变化,那么这道题就以选择的个数作为阶段......
  • 【赛题解析】【网络建设与运维】2023年全国职业院校技能大赛中职组“网络建设与运维”
    在此之前,欢迎关注波比网络波比网络官方公众号:blbinet波比网络工作室官方公众号:blbistudio技能大赛各赛项交流群:https://www.blbi.cn/threads/40/更多正式赛题源文件访问:https://www.blbi.cn获取技术支持访问:https://www.blbi.cn/form/1/selectNISP、CIPS、PTE证书可......
  • 【赛题解析】【网络建设与运维】2023年全国职业院校技能大赛中职组“网络建设与运维”
    在此之前,欢迎关注波比网络波比网络官方公众号:blbinet波比网络工作室官方公众号:blbistudio技能大赛各赛项交流群:https://www.blbi.cn/threads/40/更多正式赛题源文件访问:https://www.blbi.cn获取技术支持访问:https://www.blbi.cn/form/1/selectNISP、CIPS、PTE证书可......
  • Tokio Marine & Nichido Fire Insurance Programming Contest 2024(AtCoder Beginner C
    A-WhoAtetheCake?题意:有三个嫌疑犯(1,2,3(号码))现在有两个证人他们指出谁不是嫌疑犯,你可以找到确定的那个罪人吗?找到输出这个人的号码没找到输出-1思路:如果两人指出的人是一个人则输出-1不是则输出6-a-b,因为1+2+3=6(sum)减去a,b肯定可以到达......
  • 题解:P8267 [USACO22OPEN] Counting Liars B & U208878 晴天
    其实,这个题,只需要最简单的枚举,加上最简单的二分查找即可~\(1\leN\le1000\)?枚举吧~咋枚举?显然,最好状态下Bessie的位置一定是某个\(p_i\),否则差一个就会导致有个奶牛要说谎。所以我们枚举(理论来讲要先去个重,这样快一点,不过貌似数据没有重的~)\(p_i\),每次遍历这帮奶牛看看有......
  • 2024XJTUPC西安交通大学校赛VP题解
    每次vp都自闭,已成习惯,时间还是分配的不合理,debug时做太多无用功。一键做题A.交小西的礼物输出a+b+2c+3d即可#pragmaGCCoptimize(3,"Ofast","inline")#include<bits/stdc++.h>#defineinf0x3f3f3f3f3fusingnamespacestd;usingll=longlong;usingpii=......