众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩《金庸群侠传X》,结果进去后各种被虐,LLM就开始研究这个游戏的代码,顺便还学会了一点点点点lua语言,然后就开始了伟大的改游戏代码之旅,然后LLM发现自己too young了,这个游戏把所有的文本都进行了哈希,如果自己改了代码或者剧情文本的话它哈希出来的值就会和原来的哈希值不一样......然后游戏就会打不开.....,现在LLM发现了文本的哈希函数,要求你写个程序,功能为:
输入一段字符串,输出一个哈希值
为了简化这个问题,我们假设游戏的哈希方法是:
从第二个字符开始每个字符都对应其ACISS码的值,然后异或上一个字符的ACISS码值,然后所有的异或值相乘取余字符串中出现最多的那个字符的ACISS码值(如果有多个,则选取ACISS码最小的那个)
#include<stdio.h>
#include<string.h>
#define N 10010
#define inf 0x3f3f3f3f
#define LL long long
char s[N];
LL ans,maxtime,mod,time[N],num[N];
int main()
{
int i;
while(scanf("%s",s)!=EOF)
{
memset(time,0,sizeof(time));
memset(num,0,sizeof(num));
maxtime = -inf;
mod = inf;
for(i = 0; s[i]!=‘\0‘; i ++)
{
time[s[i]]++;//记录每个ascii码出现的次数
if(time[s[i]] > maxtime||time[s[i]]==maxtime&&mod>s[i])//每次记录比较小的ascii码值
{
mod = s[i];
maxtime = time[s[i]];
}
if(i)//取1及其以后的异或值
num[i] = s[i]^s[i-1];
}
ans = 1;
for(i = 1; s[i]!=‘\0‘; i ++)
ans= num[i]*ans%mod;
printf("%lld\n",ans);
}
return 0;
}