• CF1155E Guess the Root


    题意:交互,有一个10次多项式,你可以询问50次当x为某个取值时多项式的值。你需要回答这个多项式的零点。

    解:询问11个数然后高斯消元解方程得出系数。然后枚举定义域看有无0点。

     1 #include <bits/stdc++.h>
     2 
     3 const int N = 20, MO = 1000003;
     4 
     5 int a[N][N], n = 10;
     6 
     7 inline int qpow(int a, int b) {
     8     int ans = 1;
     9     while(b) {
    10         if(b & 1) {
    11             ans = 1ll * ans * a % MO;
    12         }
    13         a = 1ll * a * a % MO;
    14         b = b >> 1;
    15     }
    16     return ans;
    17 }
    18 
    19 inline void Gauss() {
    20     for(int i = 0; i < n; i++) {
    21         for(int j = i + 1; j <= n; j++) {
    22             if(a[j][i]) {
    23                 std::swap(a[j], a[i]);
    24                 break;
    25             }
    26         }
    27         if(!a[i][i]) continue;
    28         int inv = qpow(a[i][i], MO - 2);
    29         for(int j = i + 1; j <= n; j++) {
    30             if(!a[j][i]) continue;
    31             int p = 1ll * a[j][i] * inv % MO;
    32             for(int k = i; k <= n + 1; k++) {
    33                 a[j][k] -= 1ll * a[i][k] * p % MO;
    34                 a[j][k] = (a[j][k] % MO + MO) % MO;
    35             }
    36         }
    37     }
    38     for(int i = n; i > 0; i--) {
    39         a[i][n + 1] = 1ll * a[i][n + 1] * qpow(a[i][i], MO - 2) % MO;
    40         a[i][i] = 1;
    41         for(int j = i - 1; j >= 0; j--) {
    42             if(!a[j][i]) continue;
    43             int p = a[j][i];
    44             a[j][i] -= p;
    45             a[j][n + 1] -= 1ll * a[i][n + 1] * p % MO;
    46             a[j][n + 1] = (a[j][n + 1] % MO + MO) % MO;
    47             a[j][i] = (a[j][i] % MO + MO) % MO;
    48         }
    49     }
    50     return;
    51 }
    52 
    53 inline int cal(int x) {
    54     int ans = 0, temp = 1;
    55     for(int i = 0; i <= n; i++) {
    56         (ans += 1ll * temp * a[i][n + 1] % MO) %= MO;
    57         temp = 1ll * temp * x % MO;
    58     }
    59     return ans;
    60 }
    61 
    62 int main() {
    63 
    64     for(int i = 0; i <= n; i++) {
    65         fflush(stdout);
    66         printf("? %d 
    ", i);
    67         fflush(stdout);
    68         scanf("%d", &a[i][n + 1]);
    69         fflush(stdout);
    70         a[i][0] = 1;
    71         for(int j = 1; j <= n; j++) {
    72             a[i][j] = 1ll * a[i][j - 1] * i % MO;
    73         }
    74     }
    75 
    76     Gauss();
    77 
    78     int ans = -1;
    79     for(int i = 0; i < MO; i++) {
    80         if(!cal(i)) {
    81             ans = i;
    82             break;
    83         }
    84     }
    85     printf("! %d 
    ", ans);
    86     return 0;
    87 }
    AC代码
  • 相关阅读:
    jxl切割excel文件
    Oracle 11g新增not null的字段比10g快--新特性
    再按一次退出程序
    项目进阶 之 集群环境搭建(一)概述
    分布式搜索elasticsearch 环境搭建
    WikiCFP--A Wiki for Calls For Papers
    Java的结构之美【2】——销毁对象
    Java的结构之美【1】——构造对象
    Bottle 中文文档
    我的算法学习之路
  • 原文地址:https://www.cnblogs.com/huyufeifei/p/10771153.html
Copyright © 2020-2023  润新知