E. Guess the Root
time limit per test:2 seconds
memory limit per test:256 megabytes
inputstandard input
outputstandard output
题目链接:http://codeforces.com/contest/1155/problem/E
Jury picked a polynomial f(x)=a0+a1⋅x+a2⋅x2+⋯+ak⋅xk. k≤10 and all ai are integer numbers and 0≤ai<106+3. It’s guaranteed that there is at least one i such that ai>0.

Now jury wants you to find such an integer x0 that f(x0)≡0mod(106+3) or report that there is not such x0.

You can ask no more than 50 queries: you ask value xq and jury tells you value f(xq)mod(106+3).

Note that printing the answer doesn’t count as a query.

Interaction
To ask a question, print “? xq” (0≤xq<106+3). The judge will respond with a single integer f(xq)mod(106+3). If you ever get a result of −1 (because you printed an invalid query), exit immediately to avoid getting other verdicts.

After printing a query do not forget to output end of line and flush the output. Otherwise, you will get Idleness limit exceeded. To do this, use:

fflush(stdout) or cout.flush() in C++;
System.out.flush() in Java;
flush(output) in Pascal;
stdout.flush() in Python;
see documentation for other languages.
When you are ready to answer, print “! x0” where x0 is the answer or −1 if there is no such x0.

You can ask at most 50 questions per test case.

Hack Format

To hack, use the following format.

The only line should contain 11 integers a0,a1,…,a10 (0≤ai<106+3, max0≤i≤10ai>0) — corresponding coefficients of the polynomial.

Examples
inputCopy

1000002

0
outputCopy
? 0

? 1

! 1
inputCopy

5

2

1

outputCopy
? 2

? 1

? 0

! -1
Note
The polynomial in the first sample is 1000002+x21000002+x^21000002+x2.

The polynomial in the second sample is 1+x21+x^21+x2.

系统生成一个函数f(x)=a0+a1x+a2x2+a3x3+...+a10x10f(x)=a_0+a_1x+a_2x^2+a_3x^3+...+a_{10}x^{10}f(x)=a0​+a1​x+a2​x2+a3​x3+...+a10​x10,在不多于50次询问的情况下回答一个使f(x)%(1e6+3)=0的x,或者回答-1表示这样的x不存在。
询问:输出一个数x,系统输入f(x)%(1e6+3)的值,需要使用清空缓冲区的相关函数。

线性代数应用题…可以使用矩阵的变换去解n元一次方程组。方法就是把a1−a10a_1-a_{10}a1​−a10​当做待求量(a0询问一个0直接得到),依次询问1,2,3,…,10(其实只要是十次方不超过longlong的范围都ok,从中选取10个方程,因为有10个待求量) 然后就已知了十个方程组成的方程组,把他看成10∗1110*1110∗11的矩阵,进行行变换变换成左侧10∗1010*1010∗10为单位阵的情况,最右侧一列的每一项就是相应的系数,第一项就是a1,以此类推,这样就求得了函数,之后只要把1-1e6+3之间的数都用这个函数试一下就可以了。因为之前询问次数比较少,也可以在本地跑完是0的情况下提交一次验证结果。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=15;
const int mod=1e6+3;
ll qpow(ll a,ll b)
{ll x=a,ans=1;while(b){if(b&1) ans=ans*x%mod;x=x*x%mod;b>>=1;}return ans;
}
ll qqpow(ll a,ll b)
{ll x=a,ans=1;while(b){if(b&1) ans=ans*x;x=x*x;b>>=1;}return ans;
}
ll inv(ll x)
{return qpow(x,mod-2);
}
ll a[N][N];
int main()
{ll a0;printf("? 0\n");fflush(stdout);scanf("%lld",&a0);if(a0==0){printf("! %d",0);return 0;}if(a0==-1) while(1);ll x=(mod-a0)%mod;//ll tmp;for(int i=0;i<10;i++){for(int j=1;j<=10;j++)a[i][j]=qqpow(i+1,j);printf("? %d\n",i+1);fflush(stdout);scanf("%lld",&a[i][11]);if(a[i][11]==0){printf("! %d",i+1);return 0;}if(a[i][11]==-1) while(1);a[i][11]=(a[i][11]-a0+mod)%mod;}
//    for(int i=0;i<10;i++)
//    {//        for(int j=1;j<=11;j++)
//            printf("%11lld ",a[i][j]);
//        printf("\n");
//    }for(int i=1;i<10;i++){for(int k=0;k<i;k++){ll p=a[i][k+1];for(int j=k+1;j<=11;j++){a[i][j]=((a[i][j]-p*a[k][j])%mod+mod)%mod;}
//
//    for(int i=0;i<10;i++)
//    {//        for(int j=1;j<=11;j++)
//            printf("%11lld ",a[i][j]);
//        printf("\n");
//    }}ll q=a[i][i+1];for(int j=i+1;j<=11;j++){a[i][j]=(a[i][j]*inv(q)+mod)%mod;}}
//
//    for(int i=0;i<10;i++)
//    {//        for(int j=1;j<=11;j++)
//            printf("%11lld ",a[i][j]);
//        printf("\n");
//    }for(int i=8;i>=0;i--){for(int k=10;k>i+1;k--){ll p=a[i][k];for(int j=k;j<=11;j++){a[i][j]=((a[i][j]-p*a[k-1][j])%mod+mod)%mod;}//    for(int i=0;i<10;i++)
//    {//        for(int j=1;j<=11;j++)
//            printf("%11lld ",a[i][j]);
//        printf("\n");
//    }}ll q=a[i][i+1];for(int j=1;j<=11;j++){a[i][j]=(a[i][j]*inv(q)+mod)%mod;}}for(int i=0;i<mod;i++)if((qpow(i,1)*a[0][11]%mod+qpow(i,2)*a[1][11]%mod+qpow(i,3)*a[2][11]%mod+qpow(i,4)*a[3][11]%mod+qpow(i,5)*a[4][11]%mod+qpow(i,6)*a[5][11]%mod+qpow(i,7)*a[6][11]%mod+qpow(i,8)*a[7][11]%mod+qpow(i,9)*a[8][11]%mod+qpow(i,10)*a[9][11]%mod)%mod==x){printf("? %d\n",i);fflush(stdout);int tt;scanf("%d",&tt);if(tt==0){printf("! %d",i);return 0;}}printf("! -1");return 0;
}

Educational Codeforces Round 63 (Rated for Div. 2) -E相关推荐

  1. B. Game with Telephone Numbers Educational Codeforces Round 63 (Rated for Div. 2)

    题意: 给定字符串,两人游戏轮流删除一个字符,谁先让字符串长度为11且第一个是8即获胜.问先手是否必胜. 思路:0到n-10之间的8的数量大于可移除的数量/2即YES否则NO 参考代码: #inclu ...

  2. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  3. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  4. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  5. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  6. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

  7. Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs

    传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici​个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...

  8. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环

    传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...

  9. Educational Codeforces Round 111 (Rated for Div. 2) D. Excellent Arrays 组合数学

    传送门 文章目录 题意: 思路: 题意: 给你一个数组aia_iai​,定义一个数组是好的当且仅当对于所有iii都有ai!=ia_i!=iai​!=i.定义f(a)f(a)f(a)表示数组aaa中i& ...

最新文章

  1. 阿里巴巴发布《2015移动安全漏洞年报》
  2. java调用项目中的文件_详解eclipse项目中.classpath文件的使用
  3. Java任务调度框架Quartz
  4. 30分钟学会mysql_30分钟回顾MySQL语法(下)
  5. 超详解析Flutter渲染引擎|业务想创新,不了解底层原理怎么行?
  6. 2021牛客暑期多校训练营7 xay loves trees dfs序 + 主席树
  7. 阿米洛键盘取消win_阿米洛花旦娘静电容V2键盘测评:不止是一把好看的键盘
  8. 大侦探福老师——幽灵Crash谜踪案
  9. Java笔记-CXF增加拦截器与自定义拦截器
  10. python 给定n,返回n以内的斐波那契数列
  11. Java的注解和反射
  12. 创建一个地震Viewer
  13. android手机抓包工具需root,android7及以上版本手机抓包
  14. arduino最大电压_制作Arduino功率计测量电压电流及功耗
  15. 服务机器人分类和发展趋势分析
  16. linux双网卡配置两个ip,centos双线双ip配置,Windows双网卡双ip配置
  17. 独家对话AAAI、ACM、ACL三会会士Raymond J. Mooney | 香侬专栏
  18. SQLTableSource
  19. CSS3新增的相关属性
  20. linux mysql命令

热门文章

  1. 最全APP测试思想及流程要点,高薪测试人员一定要看
  2. Android开发之实时更新系统时间
  3. 使用Excel校验VIN码(车架号)第九位
  4. spss多因素方差分析
  5. EXCEL 打印设置公共表头
  6. RGB 无限立方体(高级版)
  7. 《XSS跨站脚本攻击剖析与防御》—第6章6.1节参 考 文 献
  8. VMT进阶1-自发光
  9. 今日头条SEO优化如何解决品牌推广难题
  10. 解决Typora导出文件为其他格式时图片无法显示或者发给别人