Google Kickstart 2018,测试用例中的回合错误
Posted
技术标签:
【中文标题】Google Kickstart 2018,测试用例中的回合错误【英文标题】:Google Kickstart 2018, Round error in test case 【发布时间】:2019-10-20 04:39:37 【问题描述】:我正在尝试解决 Google Kickstart 2018 第 A 轮中的 Scrambled Words 问题。
我无法生成输入字符串。这是他们给的方向
第三行包含两个小写英文字母S1和S2,和 五个整数 N、A、B、C 和 D。S1 和 S2 是前两个字符 教授的字符串 S 的长度,N 是 S 的长度,其他四个 整数是您应该用来生成字符的参数 S,如下:
首先我们将 ord(c) 定义为字符 c 的十进制值,然后 char(n) 作为十进制 n 的字符值。例如,ord('a') = 97 和 char(97) = 'a'。其他可以参考 ASCII 表 转化率。
现在,定义 x1 = ord(S1), x2 = ord(S2 )。然后,使用下面的递归 为 i = 3 到 N 生成 xi:
xi = ( A * xi-1 + B * xi-2 + C ) 模 D.我们定义 Si = char(97 + ( xi modulo 26 )),对于所有 i = 3 到 N。
使用这些方向进行测试输入,
1
5
axpaj apxaj dnrbt pjxdn abd
a a 50 1 1 1 30
我生成的字符串是
aapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaapaa
但是应该生成的字符串是
aapxjdnrbtvldptfzbbdbbzxtndrvjblnzjfpvhdhhpxjdnrbt
这是我的代码
char S1, S2;
long N, A, B, C, D;
cin >> S1 >> S2 >> N >> A >> B >> C >> D;
A %= D;
B %= D;
C %= D;
vector<char> S;
S.push_back(S1);
S.push_back(S2);
for (int i = 2; i < N; i++)
long xi1 = (long)S[i - 1];
long xi2 = (long)S[i - 2];
long xi = (A * xi1) % D;
xi += ((B * xi2) % D);
xi += C;
xi %= D;
xi %= 26;
char Si = (char)(97 + xi);
S.push_back(Si);
【问题讨论】:
如果您尝试使用std::cin >> some_std_string
阅读axpaj apxaj dnrbt pjxdn abd
,那将无法正常工作。它只会读取axpaj
然后停止。您需要使用getline()
。
我事先单独阅读了这些内容,没有任何错误。我使用循环读取每个单词,因为单词的数量是给我们的。
【参考方案1】:
在您的代码中,您假设 S_i == x_i 这是错误的。递归公式是用 x_i 定义的,而不是 S_i,考虑下面的代码
#include <iostream>
int main()
long N = 4;
long A = 1;
long B = 1;
long C = 1;
long D = 30;
std::string s = "aa";
int xi1 = 97;
int xi2 = 97;
for (int i = 2; i < N; i++)
std::cout<<(int)xi1<<" "<<xi2<< " vs si:"<<(int)s[i-1]<<" "<<(int)s[i-2]<<std::endl;
int xi = (A*xi1 + B*xi2 + C)%D;
char si = 97 + (xi%26);
std::cout<<"xi: "<<xi<<" vs "<<(int)si<<std::endl;
s += si;
xi2 = xi1;
xi1 = xi;
std::cout<<s<<std::endl;
std::cout<<"------------------------"<<std::endl;
return 0;
带输出:
97 97 vs si:97 97
xi: 15 vs 112
aap
------------------------
15 97 vs si:112 97
xi: 23 vs 120
aapx
------------------------
【讨论】:
以上是关于Google Kickstart 2018,测试用例中的回合错误的主要内容,如果未能解决你的问题,请参考以下文章
Google Kickstart 2020 轮 D- 破纪录者问题
Google Kickstart Round A 2021-Rabbit House
Google Kickstart 2020 Round A: Plates Solution