[luoguP10217/联合省选 2024] 季风

题意

给定 n,k,x,y2n 个整数 x0,y0,x1,y1,,xn1,yn1

找到最小的非负整数 m,使得存在 2m 个实数 x0,y0,x1,y1,,xm1,ym1 满足以下条件,或报告不存在这样的 m

  • i=0m1(xi+ximodn)=x
  • i=0m1(yi+yimodn)=y
  • 0im1,|xi|+|yi|k

特别地,m=0 时,认为 i=0m1(xi+ximodn)i=0m1(yi+yimodn) 均为 0

sol

第三条限制等价于 |i=0m1ximodn|+|i=0m1yimodn|mk,也就是 |xi=0m1xi|+|yi=0m1yi|mk
注意到可以拆分为不同周期:设 m=pn+q,变为 |xpi=0n1xii=0q1xi|+|ypi=0n1yii=0q1yi|mk,可以枚举每一个 q,解这个绝对值不等式,求出最小的 p 的正整数解,取最小的 pn+q 即为答案。

代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>

using namespace std;
typedef long long LL;

const int N = 100005;
const LL INF = 9e18;
const double eps = 1e-8;

LL sx[N], sy[N];
int n, k, X, Y;
int T;
double l, r;
int dx[] = {1, 1, -1, -1}, dy[] = {1, -1, 1, -1};

void calc_range(double x, double y){
    l = max(l, x), r = min(r, y);
}

int main(){
    scanf("%d", &T);
    for (int cs = 1; cs <= T; cs ++ ) {
        scanf("%d%d%d%d", &n, &k, &X, &Y);
        for (int i = 1; i <= n; i ++ ) {
            scanf("%lld%lld", &sx[i], &sy[i]);
            sx[i] += sx[i - 1], sy[i] += sy[i - 1];
        }
        
        LL ans = 9e18;
        for (int i = 0; i < n; i ++ ) {
            l = -INF, r = INF;
            for (int j = 0; j < 4; j ++ ){
                LL coeff = dx[j] * sx[n] + dy[j] * sy[n] + (LL) n * k;
                LL lft = dx[j] * sx[i] + dy[j] * sy[i] + (LL) i * k;
                LL div1 = dx[j] * X + dy[j] * Y - lft;
                if (coeff == 0) {
                    if (div1 <= 0) continue;
                    calc_range(INF, -INF);
                    break;
                }
                else if (coeff < 0) calc_range(-INF, 1.0 * div1 / coeff);
                else calc_range(ceil(1.0 * div1 / coeff), INF);
            }
            calc_range(0, INF);
            if (l - r > eps) continue;
            ans = min(ans, (LL) ceil(l) * n + i);
        }
        printf("%lld\n", ans >= INF ? -1 : ans);
    }

    return 0;
}

蒟蒻犯的若至错误

  • 计算时直接取整数,导致出现两个非 0 解时取到不合法解
  • eps 过大
posted @   是一只小蒟蒻呀  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示