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. reboot/shutdown

    reboot 重启操作系统 shutdown

  2. dijkstra之zkw线段树优化

    其实特别好理解,我们只要写一个数据结构(线段树)支持一下操作: 1.插入一个数\(x\). 2.查询当前数据结构中最小的数的插入编号. 3.删除插入编号为\(x\)的数. 第一眼看成可持久化了 其实就 ...

  3. Multiism四阶巴特沃兹低通滤波器的仿真实现

    因为4阶巴特沃兹低通滤波器比较简单,所以省略设计过程和思路以及不必要的废话. 设计的滤波器的性能:截止频率大约是500HKZ,Rs = Rl = 32 欧姆. 预估滤波器大致的幅频特性曲线如下: 最初 ...

  4. [python]@cached_property缓存装饰器

    cached_property缓存装饰器 class cached_property(object): """ Decorator that converts a met ...

  5. nginx静态页面镜像

    user root; worker_processes ; #error_log logs/error.log; #error_log logs/error.log notice; #error_lo ...

  6. Spring AOP常见面试题

    一.AOP是什么? 与OOP对比,面向切面,传统的OOP开发中的代码逻辑是至上而下的过程中会长生一些横切性问题,这些横切性的问题和我们的主业务逻辑关系不会散落在代码的各个地方,造成难以维护,AOP的编 ...

  7. Turtle库画小猫咪

    视频请点击这里哟 这个是用python库画的小猫咪,前面一步步的画整个猫的整个身体,具体步骤都写在了注释之中.身体部分画的比较快,后面画了5个心,由于画心的时候要改变好多度数,而且每次只前进一点点,所 ...

  8. DS博客作业07——查找

    1.本周学习总结 1.1思维导图 1.2.谈谈你对查找运算的认识及学习体会. 查找的内容和前两章树和图相比,要简单许多,在二次搜索树虽然也要用到树,但是也是很简单的树的操作,再加上查找的代码可以使用m ...

  9. 面试题:this指针的指向,以及call、apply应用

    var a = 2; function test(){ var a = 4; console.log(this.a); this.a = 1; } test();//2 //这里为什么是2?因为调用t ...

  10. 胜利点 final发布

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/10062 1.视频地址:https://www.bilibili.com/ ...