【LOJ】#3032. 「JOISC 2019 Day1」馕

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();
}

转载于:https://www.cnblogs.com/ivorysi/p/10953256.html

内容概要:本文深入探讨了AMESim仿真平台在电动汽车(EV)热泵空调系统设计与优化中的应用。首先介绍了AMESim的基础建模方法,如构建制冷循环模型中的压缩机、蒸发器和冷凝器等组件,并详细解释了各部件的工作原理及其参数设定。接着重点阐述了EV热泵空调系统的特殊之处,即不仅能够制冷还可以在冬季提供高效的制热功能,这对于提高电动汽车在寒冷条件下的续航里程和乘坐舒适性非常重要。文中给出了几个具体的案例,包括通过改变压缩机运行频率来进行性能优化,以及针对低温环境下热泵系统的控制策略,如四通阀切换逻辑、电子膨胀阀开度调节等。此外,还讨论了热泵系统与其他子系统(如电池温控)之间的协同工作方式,强调了系统集成的重要性。最后分享了一些实用的经验技巧,例如如何避免仿真过程中可能出现的问题,怎样评估系统的整体性能等。 适合人群:从事汽车工程、暖通空调(HVAC)领域的研究人员和技术人员,特别是关注新能源汽车热管理系统的专业人士。 使用场景及目标:适用于希望深入了解电动汽车热泵空调系统特性的工程师们,旨在帮助他们掌握基于AMESim进行系统建模、仿真分析的方法论,以便更好地指导实际产品研发。 阅读建议:由于涉及到较多的专业术语和技术细节,建议读者具备一定的机械工程背景知识,同时配合官方文档或其他参考资料一起研读,以加深理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值