Unfair contest(个人做法)

Unfair contest

题意:

两个人参赛,n个评委打分,去掉s个最高分,去掉t个最低分,剩下分求平均分,平均分大的获胜。你是第n个评委,此时已知前n-1个评委所打分数,现在轮到你打分,要求你在保证第一个人获胜的情况下,使得a-b最小(a为你给第一个人打的分数,b为你给第二个人打的分数)

题解:

我和队友是这样想的:
目前已经有n-1对分数已经确定,此时要去掉s个最高分,t个最低分,那我们将最高的s-1个分数舍弃,最低的t-1个舍去,因为无论第n个人怎么取分,都必然要舍去。好,现在问题就成了,剩下成绩中要去掉一个最高分,一个最低分,然后问第n个人如何打分?
因为第n个人不知道他打分如何?他的打分决定了到底哪个最大值和最小值被舍弃,有可能是第n个的成绩被舍弃,也有可能是之前成绩的最高分被舍弃,因此需要我们去分类讨论
九种情况(对于第一个人三种情况,第二个人三种情况),三种分别是:c在s后,c在st之间,c在t后,我们简称第n个人的评分为c,之前n-1个成绩的最高分和最低分分别是s和t

  1. 对于第一个人c<s,对于第二个人c<s,此时去掉最高分t,去掉最低分c(对于两个人都是)
  2. 对于第一个人c<s,对于第二个人c>t
  3. 对于第一个人c<s,对于第二个人s<c<t
  4. 对于第一个人s<c<t,对于第二个人c<s
  5. 对于第一个人s<c<t,对于第二个人s<c<t
  6. 对于第一个人s<c<t,对于第二个人c>t
  7. 对于第一个人c>t,对于第二个人c<s
  8. 对于第一个人c>t,对于第二个人s<c<t
  9. 对于第一个人c>t,对于第二个人c>t
    在这里插入图片描述
    我们先把蓝色部分统计好,然后分九种情况依次去判断是否符合要求,记录最大差值,一定不重不漏。
    分类讨论每种情况下的最大差值,很麻烦,我和队友一点点分析才写完。
    但是一直wa,因为我们忘了特判s=0,t=0的各种情况,如果s=0,t=0,说明不用去掉最大最小值,此时最左侧和最右侧时c的取值情况,在完成初始化后,依旧判断。初始化0和n+1的情况,因为这是c的取值
	a[0]=1;a[n+1]=h;b[0]=1;b[n+1]=h; 

我也说不上明白,我们这个方法很麻烦,但是能做出来,详细看看代码理解

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
const int inf=0x3f3f3f3f;
ll T,s,t,h,n;
ll a[maxn];
ll b[maxn];
int main()
{//freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); cin>>T;while(T--){cin>>n>>s>>t>>h;swap(s,t);int flag=0;ll ans=inf;for(int i=1;i<=n-1;i++)scanf("%d",&a[i]);for(int i=1;i<=n-1;i++)scanf("%d",&b[i]);sort(a+1,a+n);sort(b+1,b+n);ll upqd=0;ll dwqd=0;n--;a[0]=1;a[n+1]=h;b[0]=1;b[n+1]=h; for(int i=s+1;i<=n-t;i++){upqd+=a[i];dwqd+=b[i];}ll tupqd=upqd;ll tdwqd=dwqd;//1 s stupqd=upqd+a[s];tdwqd=dwqd+b[s];if(tupqd>tdwqd){flag=1;ans=min(ans,1-b[s]);}//2 s ttupqd=upqd+a[s];tdwqd=dwqd+b[n-t+1];if(tupqd>tdwqd){flag=1;ans=min(ans,1-h);}//cout<<flag<<endl;//3 s ctupqd=upqd+a[s];tdwqd=dwqd;//cout<<tupqd<<" "<<tdwqd<<endl;//cout<<flag<<endl;if(tupqd>tdwqd+b[s]){flag=1;ll tmp=min(tupqd-tdwqd-1,b[n-t+1]);ans=min(ans,1-(tmp));//}//4 c s//cout<<flag<<endl;tupqd=upqd;tdwqd=dwqd+b[s];if(tupqd+a[n-t+1]>tdwqd){flag=1;ll tmp=max(tdwqd-tupqd+1,a[s]);ans=min(ans,tmp-b[s]);}//5 c c//cout<<ans<<endl;tupqd=upqd;tdwqd=dwqd;if(tupqd+a[n-t+1]>tdwqd+b[s]){flag=1;ll tmp=max((tdwqd-tupqd)+1,a[s]-b[n-t+1]);ans=min(ans,tmp);}//6 c ttupqd=upqd;tdwqd=dwqd+b[n-t+1];if(tupqd+a[n-t+1]>tdwqd){flag=1;ll tmp=max(a[s],tdwqd-tupqd+1);ans=min(ans,tmp-h);}//7 t stupqd=upqd+a[n-t+1];tdwqd=dwqd+b[s];if(tupqd>tdwqd){flag=1;ans=min(ans,a[n-t+1]-b[s]);}//8 t ctupqd=upqd+a[n-t+1];tdwqd=dwqd;if(tupqd>tdwqd+b[s]){flag=1;ll tmp=min((tupqd-tdwqd-1),b[n-t+1]);ans=min(ans,a[n-t+1]-tmp);}//9 t ttupqd=upqd+a[n-t+1];tdwqd=dwqd+b[n-t+1];if(tupqd>tdwqd){flag=1;ans=min(ans,a[n-t+1]-h);}if(flag)cout<<ans<<endl;else cout<<"IMPOSSIBLE"<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 进程外(out-of-process)托管(7)《从零开始学ASP.NET CORE MVC》

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;ASP.NET Core 进程内(InProcess)托管ASP.NET Core 进程内(InProcess)托管我们先简单回顾下 ASP.NET Core 中,要配置InProcess的服务器&#xff0c;需要在项目文件中添加< AspNetCoreHostingModel >元素&#…

eShopOnContainers 知多少[10]:部署到 K8S | AKS

1. 引言断断续续&#xff0c;感觉这个系列又要半途而废了。趁着假期&#xff0c;赶紧再更一篇&#xff0c;介绍下如何将eShopOnContainers部署到K8S上&#xff0c;进而实现大家常说的微服务上云。2. 先了解下 Helm读过我上篇文章ASP.NET Core 借助 K8S 玩转容器编排的同学&…

DI是实现面向切面和面向抽象的前提

DI越来越重要DI就是依赖注入&#xff0c;现在来说&#xff0c;大部分框架都是以DI为基础组件的&#xff0c;每一个框架都有自己的DI组件&#xff0c;像dotnet core&#xff0c;java spring等&#xff0c;也都为自己的框架量身打造了DI工具。面向对象的几个原则依赖倒置原则&…

.net core 并发下的线程安全问题

抱歉&#xff0c;其实内容并不如题&#xff01;&#xff01;&#xff01;背景&#xff08;写测试demo所出现的异常&#xff0c;供大家学习与拍砖&#xff09;&#xff1a;.net core webapi项目&#xff0c;做了一个授权的filter&#xff08;真正的生产项目的话&#xff0c;JWT很…

cf1555B. Two Tables

cf1555B. Two Tables 题意&#xff1a; 一个大矩阵空间内放置一个矩阵a&#xff0c;现在要再往这个空间内放一个矩阵b&#xff0c;a移动距离len才能放下b&#xff0c;问len最小是多少 题解&#xff1a; 不难发现左右或上下移动是最佳的&#xff0c;斜着移动是最不好的。此时…

cf1555C Coin Rows

cf1555C Coin Rows 题意&#xff1a; 有一个两行m列的地图&#xff0c;每个格子都有对应的价值&#xff0c;有a&#xff0c;b两个人&#xff0c;都从左上角到右下角&#xff0c;且都只能向右向下走&#xff0c;a先出发&#xff0c;a每到一个格子&#xff0c;就会获得这个地方…

C#并行编程(2):.NET线程池

线程 Thread在总结线程池之前&#xff0c;先来看一下.NET线程。.NET线程与操作系统(Windows)线程有什么区别&#xff1f;.NET利用Windows的线程处理功能。在C#程序编写中&#xff0c;我们首先会新建一个线程对象System.Threading.Thread&#xff0c;并为其指定一个回调方法&…

ASP.NET Core launchsettings.json文件(8)《从零开始学ASP.NET CORE MVC》:

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;ASP.NET Core 进程外(out-of-process)托管ASP.NET Core launchsettings.json文件在本视频中&#xff0c;我们将讨论在ASP.NET Core项目中launchsettings.json文件的重要性。launchsettings.json文件您将在项目根文件…

[CQOI2017] 老C的方块(网络流染色建图)

problem luogu-P3756 solution 据说要做网络流 24\text{24}24 题中的《方格取数问题》和《骑士共存问题》。 &#xff1f;&#xff1f;&#xff1f;那个不是直接最小割吗&#xff1f;哦原来是从黑白染色来理解的。我还是太水了。 这种题之所以能用网络流做&#xff0c;是因…

江湖召集:.NET开发者们看过来,这场长沙的开发者技术大会正是为你精心准备的大餐...

看过去&#xff0c;历史的尘埃与沧海桑田古语有云“近代中国&#xff0c;湖南独撑半边天”&#xff0c;湖南长沙&#xff0c;作为湖南省的省会&#xff0c;自古以来便是各界风云人士兴起之地。随着互联网时代的到来&#xff0c;长沙&#xff0c;这座历史悠久的文化名城&#xf…

C#并行编程(3):并行循环

初识并行循环并行循环主要用来处理数据并行的&#xff0c;如&#xff0c;同时对数组或列表中的多个数据执行相同的操作。在C#编程中&#xff0c;我们使用并行类System.Threading.Tasks.Parallel提供的静态方法Parallel.For和Parallel.ForEach来实现并行循环。从方法名可以看出&…

Acwing 252. 树

Acwing 252. 树 题意&#xff1a; 给定一个有 N 个点&#xff08;编号 0,1,…,N−1&#xff09;的树&#xff0c;每条边都有一个权值&#xff08;不超过 1000&#xff09;。 树上两个节点 x 与 y 之间的路径长度就是路径上各条边的权值之和。 求长度不超过 K 的路径有多少条…

.net 4.5部署到docker容器

.NET FX 应用程序也是可以容器化的&#xff0c;容器化的选项有两个&#xff1a;部署到windows容器部署到linux容器部署到windows容器由于.net本身就是运行在windows平台的&#xff0c;所以它与windows容器也是更加适合&#xff0c;你可以以iis镜像为基础&#xff0c;去编写你的…

将传统 WPF 程序迁移到 DotNetCore 3.0

介绍由于历史原因&#xff0c;基于 Windows 平台存在着大量的基于 .NetFramework 开发的 WPF 和 WinForm 相关程序&#xff0c;如果将这些程序全部基于 DotNetCore 3.0 重写一遍显然是不现实的&#xff0c;但是 DotNetCore 是未来发展的趋势。所以本文通过以 WPF 为例&#xff…

.NET Core 时代已经到了,你准备好了吗

今天很多人都收到了阿里云函数计算支持.NET Core的短信了。通过访问 https://help.aliyun.com/document_detail/112379.html 你可以看到最新的说明。现在和过去的两年不同&#xff0c;因为最恶劣的时期已经过去&#xff0c;经历过了最黑暗的时刻&#xff0c;我们正在走向光明的…

ASP.NET Core appsettings.json文件(9)《从零开始学ASP.NET CORE MVC》:

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;ASP.NET Core launchsettings.json文件ASP.NET Core appsettings.json文件在本视频中&#xff0c;我们将讨论ASP.NET Core 项目中appsettings.json文件的重要性。在以前的ASP.NET版本中&#xff0c;我们将应用程序配…

在Windows上使用Docker运行.NetCore

今天我们来说下如何在windows下使用docker运行.net core&#xff0c;既然是docker&#xff0c;那么我们首先得在windows上安装docker。在Windows安装 docker 有两种选择 &#xff1a;1、docker for windows2、docker toolbox 区别&#xff1a;docker for windows-64位Windows 1…

浅谈C#在网络波动时防重复提交

前几天&#xff0c;公司数据库出现了两条相同的数据&#xff0c;而且时间相同&#xff08;毫秒也相同&#xff09;。排查原因&#xff0c;发现是网络波动造成了重复提交。由于网络波动而重复提交的例子也比较多&#xff1a;网络上&#xff0c;防重复提交的方法也很多&#xff0…

C#并行编程(4):基于任务的并行

C#中的任务Task在C#编程中&#xff0c;实现并行可以直接使用线程&#xff0c;但使用起来很繁琐&#xff1b;也可以使用线程池&#xff0c;线程池很大程度上简化了线程的使用&#xff0c;但是也有着一些局限&#xff0c;比如我们不知道作业什么时候完成&#xff0c;也取不到作业…

.net core 注入中的三种模式:Singleton、Scoped 和 Transient

从上篇内容不如题的文章《.net core 并发下的线程安全问题》扩展认识.net core注入中的三种模式&#xff1a;Singleton、Scoped 和 Transient我们都知道在 Startup 的 ConfigureServices 可以注入我们想要的服务&#xff0c;那么在注入的时候有三种模式可以选择&#xff0c;那么…