LOJ#3032. 「JOISC 2019 Day1」馕

处理出每个人把馕切成N段,每一段快乐度相同,我们选择第一个排在最前的人分给他的第一段,然后再在未选取的的人中选一个第二个排在最前的切一下,并把第二段给他,这样下去一定有解

代码细节具体在比较大小的时候成绩可能需要int128

然后在给每个人分段的时候,把一个馕的长度当成\(Nq\),把要得到的每段长度当成\(sum\)(所有段快乐度的总和)就可以1去分了

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define MAXN 2005
#define ba 47
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 +c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
int64 gcd(int64 a,int64 b) {
return b == 0 ? a : gcd(b,a % b);
}
struct factor {
int64 x,y;
factor(int64 a = 0,int64 b = 1) {
x = a;y = b;
int64 g = gcd(x,y);x /= g;y /= g;
}
friend factor operator + (const factor &a,const factor &b) {
int64 u = a.x * b.y + b.x * a.y,d = a.y * b.y;
int64 g = gcd(u,d);u /= g;d /= g;
return factor(u,d);
}
friend factor operator - (const factor &a,const factor &b) {
int64 u = a.x * b.y - a.y * b.x;
int64 d = a.y * b.y;
int64 g = gcd(u,d);u /= g;d /= g;
return factor(u,d);
}
friend factor operator * (const factor &a,const factor &b) {
int64 u = a.x * b.x,d = a.y * b.y;
int64 g = gcd(u,d);
u /= g;d /= g;
return factor(u,d);
}
friend factor operator / (const factor &a,const factor &b) {
int64 u = a.x * b.y,d = a.y * b.x;
int64 g = gcd(u,d);u /= g;d /= g;
return factor(u,d);
}
friend bool operator < (const factor &a,const factor &b) {
return (__int128)a.x * b.y < (__int128)a.y * b.x;
}
friend bool operator == (const factor &a,const factor &b) {
return a.x * b.y == a.y * b.x;
}
friend bool operator <= (const factor &a,const factor &b) {
return a < b || a == b;
}
}cut[MAXN],poi[MAXN][MAXN];
int N,L,p[MAXN];
int64 rem[MAXN],v[MAXN][MAXN],sum[MAXN];
bool vis[MAXN];
void Solve() {
read(N);read(L);
for(int i = 1 ; i <= N ; ++i) {
for(int j = 1 ; j <= L ; ++j) {
read(v[i][j]);
sum[i] = sum[i] + v[i][j];
}
}
for(int i = 1 ; i <= N ; ++i) {
int now = 1;
for(int j = 1 ; j <= L ; ++j) rem[j] = N * v[i][j];
for(int j = 1 ; j < N ; ++j) {
int64 sv = sum[i];
while(1) {
if(rem[now] < sv) {sv -= rem[now];++now;continue;}
else {
rem[now] -= sv;
poi[i][j] = now - factor(rem[now],N * v[i][now]);
break;
}
}
}
}
for(int j = 1 ; j < N ; ++j) {
int pos = -1;
for(int i = 1 ; i <= N ; ++i) {
if(!vis[i]) {
if(pos == -1) pos = i;
else if(poi[i][j] < poi[pos][j]) pos = i;
}
}
p[j] = pos;vis[pos] = 1;
out(poi[pos][j].x);space;out(poi[pos][j].y);enter;
}
for(int i = 1 ; i <= N ; ++i) {
if(!vis[i]) {p[N] = i;break;}
}
for(int i = 1 ; i <= N ; ++i) {
out(p[i]);space;
}
enter;
}
int main() {
#ifdef ivorysi
freopen("03-02.in","r",stdin);
#endif
Solve();
}

【LOJ】#3032. 「JOISC 2019 Day1」馕的更多相关文章

  1. 【LOJ】#3031. 「JOISC 2019 Day1」聚会

    LOJ#3031. 「JOISC 2019 Day1」聚会 听说随机可过? 我想了很久想了一个不会被卡的做法,建出前\(u - 1\)个点的虚树,然后找第\(u\)个点的插入位置,就是每次找一条最长链 ...

  2. 【LOJ】#3030. 「JOISC 2019 Day1」考试

    LOJ#3030. 「JOISC 2019 Day1」考试 看起来求一个奇怪图形(两条和坐标轴平行的线被切掉了一个角)内包括的点个数 too naive! 首先熟练的转化求不被这个图形包含的个数 -- ...

  3. @loj - 3039@ 「JOISC 2019 Day4」蛋糕拼接 3

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 今天是 IOI 酱的生日,所以她的哥哥 JOI 君给她预定了一个 ...

  4. 【LOJ】#3036. 「JOISC 2019 Day3」指定城市

    LOJ#3036. 「JOISC 2019 Day3」指定城市 一个点的可以dp出来 两个点也可以dp出来 后面的就是在两个点的情况下选一条最长的链加进去,用线段树维护即可 #include < ...

  5. 【LOJ】#3034. 「JOISC 2019 Day2」两道料理

    LOJ#3034. 「JOISC 2019 Day2」两道料理 找出最大的\(y_{i}\)使得\(sumA_{i} + sumB_{y_i} \leq S_{i}\) 和最大的\(x_{j}\)使得 ...

  6. 【LOJ】#3033. 「JOISC 2019 Day2」两个天线

    LOJ#3033. 「JOISC 2019 Day2」两个天线 用后面的天线更新前面的天线,线段树上存历史版本的最大值 也就是线段树需要维护历史版本的最大值,后面的天线的标记中最大的那个和最小的那个, ...

  7. 「JOISC 2019 Day3」穿越时空 Bitaro

    「JOISC 2019 Day3」穿越时空 Bitaro 题解: ​ 不会处理时间流逝,我去看了一眼题解的图,最重要的转换就是把(X,Y)改成(X,Y-X)这样就不会斜着走了. ​ 问题变成二维平面上 ...

  8. 「JOISC 2014 Day1」巴士走读

    「JOISC 2014 Day1」巴士走读 将询问离线下来. 从终点出发到起点. 由于在每个点(除了终点)的时间被过来的边固定,因此如果一个点不被新的边更新,是不会发生变化的. 因此可以按照时间顺序, ...

  9. 「JOISC 2014 Day1」 历史研究

    「JOISC 2014 Day1」 历史研究 Solution 子任务2 暴力,用\(cnt\)记录每种权值出现次数. 子任务3 这不是一个尺取吗... 然后用multiset维护当前的区间,动态加, ...

随机推荐

  1. Hibernate 4 升级到 5 后显示未知实体错误

    提示的错误信息如下: org.hibernate.MappingException: Unknown entity: com.ossez.reoc.common.crm.DoNotCall at or ...

  2. word标题前出现黑块解决方案

    1,将光标定位到出现问题的标题前面 2,点击最上方的标题,然后点击修改-->格式-->编号-->无-->确定. 3,重新设置标题即可.

  3. Python相关分析—一个金融场景的案例实操

    哲学告诉我们:世界是一个普遍联系的有机整体,现象之间客观上存在着某种有机联系,一种现象的发展变化,必然受与之关联的其他现象发展变化的制约与影响,在统计学中,这种依存关系可以分为相关关系和回归函数关系两 ...

  4. 利用django框架,手把手教你搭建数据可视化系统(一)

    如何使用django去构建数据可视化的 web,可视化的结果可以呈现在web上. 使用django的MTV模型搭建网站 基础铺垫-MTV模型 Created with Raphaël 2.1.0Req ...

  5. axios 是如何封装 HTTP 请求的

    原载于 TutorialDocs 网站的文章<How to Implement an HTTP Request Library with Axios>.译者:zhangbao90shttp ...

  6. Apache搭建简单的图片访问服务器

    安装apache后,修改httpd.conf文件 将根目录修改为你图片所在目录 DocumentRoot有这么一行,修改成你要指向的路径 DocumentRoot "/yang/pic&qu ...

  7. Failed to execute goal maven-gpg-plugin 1.5 Sign

    问题描述: 解决办法:跳过maven-gpg-plugin <build> <pluginManagement> <plugins> <plugin> ...

  8. springmvc源码解读(简介)

    1.客户端请求提交的DispatcherServlet 2.由DispatcherServlet控制器查询一个或者多个HandlerMapping,找到处理请求的Controller. 3.Dispa ...

  9. Python datetime库计算两个时间点之间的分钟(秒、天)数

    计算两个时间点之间的分钟数 import datetime def minNums(startTime, endTime): '''计算两个时间点之间的分钟数''' # 处理格式,加上秒位 start ...

  10. PyTorch中使用深度学习(CNN和LSTM)的自动图像标题

    介绍 深度学习现在是一个非常猖獗的领域 - 有如此多的应用程序日复一日地出现.深入了解深度学习的最佳方法是亲自动手.尽可能多地参与项目,并尝试自己完成.这将帮助您更深入地掌握主题,并帮助您成为更好的深 ...