某oj为了防止爬虫,做了一些反爬的技巧,比如提交表单的隐藏字段

。关于

的计算是这样子的。某oj服务器给你的浏览器一个长度为

的字符串,然后通过你浏览器的运行Js脚本对这个字符串进行计算(计算公式见下),然后计算对应出

值。因此你的爬虫需要需要去获取这个字符串,并且模拟这段js代码将字符串对应的

值,才能完成代码的提交。
这段代码故意使用很恶心的变量名来,防止爬虫,因此提供这段代码的c语言翻译版本。
int calculatetta(char* a) {
int b = 0;
for (int c = 0; c < strlen(a); ++c) {
b = (b + (c + 1) * (c + 2) * a[c]) % 1009;
if (c % 3 == 0) ++b;
if (c % 2 == 0) b *= 2;
if (c > 0) b -= ((int) (a[c / 2] / 2)) * (b % 5);
while (b < 0) b += 1009;
while (b >= 1009) b -= 1009;
}
return b;
}
当然了,为了照顾到使用Python的同学,这里也同时提供Python语言的翻译版。
def calculatetta(a: str):
b = 0
for c in range(len(a)):
b = (b + (c + 1) * (c + 2) * ord(a[c])) % 1009
if c % 3 == 0:
b = b + 1
if c % 2 == 0:
b = b * 2
if c > 0:
b = b - (ord(a[c // 2]) // 2) * (b % 5)
while b < 0:
b = b + 1009
while b >= 1009:
b = b - 1009
return b
对于使用Java的同学,这里同样提供Java版本的代码片段
public static int calculatetta(String a) {
int b = 0;
for (int c = 0; c < a.length(); ++c) {
b = (b + (c + 1) * (c + 2) * ((int) a.charAt(c))) % 1009;
if (c % 3 == 0) ++b;
if (c % 2 == 0) b *= 2;
if (c > 0) b -= (((int) a.charAt(c / 2)) / 2) * (b % 5);
while (b < 0) b += 1009;
while (b >= 1009) b -= 1009;
}
return b;
}
对于使用其他语言的同学,这里提供伪代码以及程序框图供参考
但是现在你知道

的值,你能求出原来的字符串吗? 你只需要给出一个满足的答案就可以。
换句话说,也就是你知道上面这个

函数的返回值

,你需要给出一个函数的传入参数

,使得
%3Db%7D)
。