zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 63 (Rated for Div. 2) E 带模高斯消元

    https://codeforces.com/contest/1155/problem/E

    题意

    (f(x)=a_0+a_1x+a_2x^2+...+a_kx^k,k leq 10,0 leq a_i < 10^6+3),每次可以询问一个x,返回(f(x)mod(10^6+3)),50次询问以内需要找到x使得 (f(x) equiv 0 mod(10^6+3))

    题解

    • 现未知(a_0,a_1,...,a_k),一共k+1个未知数,需要k+1个方程来解,因此只需要询问k+1次即可
    • 将x看成系数,(a_0,a_1,...,a_k)当成未知数,带模高斯消元即可

    代码

    #include<bits/stdc++.h>
    #define ll long long 
    using namespace std;
    const ll P=1e6+3;
    ll a[15][15],b[15];
    
    int ask(int i){
        printf("? %d
    ",i);
        fflush(stdout);
        int x;scanf("%d",&x);
        return x;
    }
    ll inv(ll bs){
        ll ans=1,x=P-2;
        while(x){
            if(x&1)ans=ans*bs%P;
            bs=bs*bs%P;
            x>>=1;
        }
        return ans;
    }
    void gao(){
        for(int i=0;i<=10;i++){
            for(int j=i+1;j<=10;j++){
                ll rate=a[j][i]*inv(a[i][i])%P;
                for(int k=i;k<=11;k++){
                    a[j][k]-=a[i][k]*rate%P;
                    a[j][k]+=P;a[j][k]%=P;
                }
            }
        }
        for(int i=10;i>=0;i--){
            for(int j=i-1;j>=0;j--){
                ll rate=a[j][i]*inv(a[i][i])%P;
                a[j][11]-=a[i][11]*rate%P;
                a[j][11]+=P;a[j][11]%=P;
            }
            a[i][i]=a[i][11]*inv(a[i][i])%P;
        }
    }
    
    int chk(ll x){
        b[0]=1;
        for(int i=1;i<=10;i++)b[i]=b[i-1]*x%P;
        ll sum=0;
        for(int i=0;i<=10;i++){
            sum+=b[i]*a[i][i]%P;
            sum%=P;
        }
        return sum==0;
    }
    int main(){
        for(int i=0;i<=10;i++){
            a[i][11]=ask(i);
            ll p=1;
            for(int j=0;j<=10;j++){
                a[i][j]=p;
                p=p*i%P;
            }
        }
        gao();
        for(int i=0;i<P;i++){
            if(chk(i)){
                printf("! %d
    ",i);
                fflush(stdout);
                return 0;
            }
        }
        printf("! -1
    ");fflush(stdout);
    }
    
  • 相关阅读:
    递归斐波那契数列时间复杂度
    动态规划 矩阵链乘法
    kmp算法
    贪心 单源最短路径
    贪心法 背包问题求解
    贪心法 货币支付问题或找零问题
    贪心算法简介
    排列问题的递归算法和非递归算法
    php __set() __get() __isset() __unset()四个方法的应用
    使用栈结构完毕四则运算
  • 原文地址:https://www.cnblogs.com/VIrtu0s0/p/10812442.html
Copyright © 2011-2022 走看看