「解题报告」ARC158D Equation

好神仙的题。

考虑形如 F(x,y,z)=xi+yi+zi 的函数有一个性质:F(tx,ty,tz)=tiF(x,y,z)

原式要求 (x+y+z)(xn+yn+zn)(x2n+y2n+z2n)x3n+y3n+z3n,假如我们令 x=ta,y=tb,z=tc,那么有 t3n+1(a+b+c)(an+bn+cn)(a2n+b2n+c2n)t3n(a3n+b3n+c3n)

那么假如我们有一个 (a,b,c),满足 (a+b+c)(an+bn+cn)(a2n+b2n+c2n)0a3n+b3n+c3n,那么我们就能计算出 t,那么 (x,y,z)=(ta,tb,tc) 就是一组答案。

我们可以每次随机 (a,b,c),然后判定答案合不合法即可。

我们可以证明,随机一次成功的概率大于等于 34

考虑我们要满足的性质:

  1. abc
  2. ai+bi+ci0,i{1,n,2n,3n}

前者概率为 O(1p),考虑后者。

我们可以证明,ai+bi+ci=0 的概率小于等于 14

我们设 S 集合为所有的非零的 ai 的取值,那么分几种情况:

mS 集合的大小,可以发现,如果 xS,那么 xkS,那么实际上 S 就是某个单位根集合,即有 xm1

  1. m=1/2:那么说明 S={1}/{±1},由于 p5,可以发现不可能等于 0
  2. m=3:说明有三个数 (x,y,z),且 x+y+z=0,由于 x31,且 p5,那么有 (2x)31,即 2x1,则 x3(2y)30,即 x+2y0,这意味着如果有两个相同的数,和一定不等于 0。那么随机选取三个数,两两不相同的概率就是 3!33=627<14
  3. m4:那么固定 (a,b),假如 aibiS,那么不可能等于 0;否则,选中这个数的概率为 1m14

综上可知等于 0 的概率为 14

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005, P = 998244353;
int T;
int n, p;
mt19937 rd(chrono::system_clock::now().time_since_epoch().count());
int Rand(int l, int r) {
    return uniform_int_distribution<int>(l, r)(rd);
}
long long qpow(int a, long long b) {
    int ans = 1;
    while (b) {
        if (b & 1) ans = 1ll * ans * a % p;
        a = 1ll * a * a % p;
        b >>= 1;
    }
    return ans;
}
int main() {
    scanf("%d", &T);
    while (T--) {
        scanf("%d%d", &n, &p);
        while (true) {
            long long a = Rand(1, p - 1), b = Rand(1, p - 1), c = Rand(1, p - 1);
            if (a == b || a == c || b == c) continue;
            int x = (a + b + c) * (qpow(a, n) + qpow(b, n) + qpow(c, n)) % p * (qpow(a, 2ll * n) + qpow(b, 2ll * n) + qpow(c, 2ll * n)) % p;
            int y = (qpow(a, 3ll * n) + qpow(b, 3ll * n) + qpow(c, 3ll * n)) % p;
            if (x != 0 && y != 0) {
                int t = 1ll * y * qpow(x, p - 2) % p;
                vector<long long> ans = { 1ll * a * t % p, 1ll * b * t % p, 1ll * c * t % p };
                sort(ans.begin(), ans.end());
                printf("%lld %lld %lld\n", ans[0], ans[1], ans[2]);
                break;
            }
        }
    }
    return 0;
}
posted @   APJifengc  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示