uoj60 怎样提高智商

题意:你需要构造n个四项选择题。格式为:问在前i个问题中选了几个hi字母?

输出有最多正确答案的构造方案。

标程:

 1 #include<cstdio>
 2 using namespace std;
 3 typedef long long ll;
 4 const int mod=998244353;
 5 int ksm(int x,int y) 
 6 {
 7     int res=1;
 8     while (y) {if (y&1) res=(ll)res*x%mod; x=(ll)x*x%mod; y>>=1;}
 9     return res;
10 }
11 int main()
12 {
13     int n;
14     scanf("%d",&n);
15     printf("%d
",(ll)ksm(3,n-1)*4%mod);
16     for (int i=1;i<n;i++) puts("A 1 0 0 0");
17     puts("A 0 0 0 0");
18     return 0;
19 } 

题解:构造

大力猜结论

考虑怎样让答案之间的影响最小,不然到后面难以构造。

不管什么字母,第一局的答案一定是0。所以我们可以给第一局设一个错误答案,该选项一定不会被选。

第二局就询问这个选项被选了几次,答案也一定是0,于是再在同一位置设错误答案。以此类推。

最后一行不用顾忌下一行,四个都是0即可。

正确答案数有3^(n-1)*4.

原文地址:https://www.cnblogs.com/Scx117/p/8718668.html