[loj3032]馕
(直接贪心会导致分子和分母过大)
令$S_{i}=\sum_{j=1}^{L}V_{i,j}$(即其独吞整个馕的快乐度),对第$i$个人求出$n$个位置$x_{1},x_{2},...,x_{n-1}$,使得以此划分出的$n$段中,其吃每一段的快乐度都恰为$\frac{S_{i}}{n}$
假设$j-1<x_{i}\le j$,那么$(j-x_{i})V_{j}=\sum_{k=1}^{j}V_{i}-\frac{i}{n}S$,即可得到$x_{i}$的分子和分母的范围分别为$2\times 10^{8}$和$4\times 10^{11}$,都可以存储
$x_{i}=j+\frac{\frac{i}{n}S-\sum_{k=1}^{j}V_{i}}{V_{j}}$
接下来,对于答案的$x_{i}$(从小到大枚举$i$),选择未选择的人中$x_{i}$的最小值以及对应的人即可
关于这一做法的正确性,考虑这个人的$x_{i-1}$必然不小于答案的$x_{i-1}$(否则应该选其),即成立
(分数比较时,分子乘分母的范围为$8\times 10^{19}$,可以使用__int128)

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 2005
4 #define ll long long
5 #define LL __int128
6 LL mul(ll x,ll y){
7 return (LL)x*y;
8 }
9 struct Frac{
10 ll x,y;
11 bool operator < (const Frac &k)const{
12 return mul(x,k.y)<mul(y,k.x);
13 }
14 Frac operator + (const Frac &k)const{
15 return Frac{x*k.y+y*k.x,y*k.y};
16 }
17 Frac operator * (const Frac &k)const{
18 return Frac{x*k.x,y*k.y};
19 }
20 }x[N][N];
21 int n,m,a[N][N],sum[N][N],vis[N],ans[N];
22 int main(){
23 scanf("%d%d",&n,&m);
24 for(int i=1;i<=n;i++)
25 for(int j=1;j<=m;j++){
26 scanf("%d",&a[i][j]);
27 sum[i][j]=sum[i][j-1]+a[i][j];
28 }
29 for(int i=1;i<=n;i++)
30 for(int j=1,k=1;j<n;j++){
31 while (Frac{sum[i][k],1}<Frac{1LL*j*sum[i][m],n})k++;
32 x[i][j]=Frac{k,1}+(Frac{1LL*j*sum[i][m],n}+Frac{-sum[i][k],1})*Frac{1,a[i][k]};
33 }
34 for(int i=1;i<=n;i++){
35 int k=0;
36 for(int j=1;j<=n;j++)
37 if ((!vis[j])&&((!k)||(x[j][i]<x[k][i])))k=j;
38 vis[k]=1,ans[i]=k;
39 if (i<n)printf("%lld %lld\n",x[k][i].x,x[k][i].y);
40 }
41 for(int i=1;i<=n;i++)printf("%d ",ans[i]);
42 }
[loj3032]馕的更多相关文章
- 【LOJ】#3032. 「JOISC 2019 Day1」馕
LOJ#3032. 「JOISC 2019 Day1」馕 处理出每个人把馕切成N段,每一段快乐度相同,我们选择第一个排在最前的人分给他的第一段,然后再在未选取的的人中选一个第二个排在最前的切一下,并把 ...
- 【C#公共帮助类】 Utils 10年代码,最全的系统帮助类
为大家分享一下个人的一个Utils系统帮助类,可能有些现在有新的技术替代,自行修改哈~ 这个帮助类主要包含:对象转换处理 .分割字符串.截取字符串.删除最后结尾的一个逗号. 删除最后结尾的指定字符后的 ...
- php 中文繁简体转换
<?php $testC = new TestC (); $testC->index (); class TestC { private $utf8_gb2312; private $ut ...
- js 简繁体字转换
有些项目需要用到简体和繁体两种字体,在js前台进行转换比较方便而且显示速度没有延时 是一个比较好的解决方案. var _isFT_CS = 0// 简体 var _isFT_CT = 1// 繁体 v ...
- 常用JS效果 需要时更新。。。
1.手风琴效果 JS: $(function() { var aMenuOneLi = $(".menu-one > li"); var aMenuTwo = ...
- 【C#公共帮助类】 Utils最全的系统帮助类
最近闲的没事做,自己想着做一些东西,不知不觉居然在博客园找到了这么多公共类,感觉还是挺有用的,平时自己还是用到了好多,就是缺少整理,现在为大家分享一下一个Utils系统帮助类,可能有些现在有新的技术替 ...
- 繁简体 互转 js
html: <script type="text/javascript" src="/js/s2t.js"></script><s ...
- C#字符操作
//字符串转ASCII码 // str1:字符串 str2:ASCII码 ] })[] == )//判断输入是否为字母 { str2= Encoding.GetEncoding(].ToString( ...
- C#编写的通过汉字得到拼音和五笔码
public static class SpellAndWbConfig { #region 变量声明 // XML文件读取实例 /// <summary> /// XML文件读取实例 / ...
随机推荐
- Python Pandas的使用 !!!!!详解
Pandas是一个基于python中Numpy模块的一个模块 Python在数据处理和准备⽅⾯⼀直做得很好,但在数据分析和建模⽅⾯就差⼀些.pandas帮助填补了这⼀空⽩,使您能够在Python中执 ...
- Tomcat 源码环境搭建
Tomcat 源码搭建 下载源码 下载地址 :https://tomcat.apache.org/download-80.cgi#8.5.35 下载之后解压缩 导入Idea 添加pom.xml文件 & ...
- DFS与BFS题解:[kaungbin]带你飞 简单搜索 解题报告
DFS and BFS 在解题前我们还是大致讲一下dfs与bfs的.(我感觉我不会bfs) 1.DFS dfs(深度优先算法) 正如其名,dfs是相当的深度,不走到最深处绝不回头的那种. 深度优先搜 ...
- SharkCTF2021 BabyGame
web类题. 访问题给页面,页面里没啥信息.抓包,发现: 访问它,发现是一个游戏. F12之后看调试器里的js代码,发现: console.log("balabalabala"); ...
- 【UE4 C++ 基础知识】<7> 容器——TSet
概述 TSet是一种快速容器类,(通常)用于在排序不重要的情况下存储唯一元素. TSet 类似于 TMap 和 TMultiMap,但有一个重要区别:TSet 是通过对元素求值的可覆盖函数,使用数据值 ...
- Scrum Meeting 0522
零.说明 日期:2021-5-22 任务:简要汇报两日内已完成任务,计划后两日完成任务 备注:由于在Beta冲刺阶段的最后一周中团队成员需要准备必修课程计算机网络的相关考试,所以为了保证Beta功能的 ...
- 热身训练1 Blood Cousins Return
点此看题 简要题面: 一棵树上有n个节点,每个节点有对应的名字(名字可重复). 每次询问,求深度比$vi$多$ki$的$vi$的儿子中,有多少种名字 分析: Step1: 我们可以懂$DFS$轻松找到 ...
- ICPC Mid-Central USA Region 2019 题解
队友牛逼!带我超神!蒟蒻的我还是一点一点的整理题吧... Dragon Ball I 这个题算是比较裸的题目吧....学过图论的大概都知道应该怎么做.题目要求找到七个龙珠的最小距离.很明显就是7个龙珠 ...
- Python里字符串Format时的一个易错“点”
这是一篇很小的笔记,原因是我做学习通的时候见到了这个题: 当时看了一会儿发现没有符合自己想法的答案,然后就脑袋一热选了C,结果当然是错了... 看了一眼这个format的字符串对象,发现有个 {:7. ...
- python基本数据类型操作
str 字符串 #1.进行字符串转换 首字母转换成大写 # name = 'wangjianhui' # v = name.capitalize() # print(v) #2. 字符转换小写 # n ...