NYOJ 2356: 哈希计划【模拟】
2017-09-01 22:30
218 查看
题目描述
众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩《金庸群侠传X》,结果进去后各种被虐,LLM就开始研究这个游戏的代码,顺便还学会了一点点点点lua语言,然后就开始了伟大的改游戏代码之旅,然后LLM发现自己too young了,这个游戏把所有的文本都进行了哈希,如果自己改了代码或者剧情文本的话它哈希出来的值就会和原来的哈希值不一样......然后游戏就会打不开.....,现在LLM发现了文本的哈希函数,要求你写个程序,功能为:输入一段字符串,输出一个哈希值
为了简化这个问题,我们假设游戏的哈希方法是:
从第二个字符开始每个字符都对应其ACISS码的值,然后异或上一个字符的ACISS码值,然后所有的异或值相乘取余字符串中出现最多的那个字符的ACISS码值(如果有多个,则选取ACISS码最小的那个)
输入
每个测试文件不多于100组测试样例输入包含一个只有小写字母的字符串s,
2<=s<=10000
输出
输出仅一个数字,代表答案
样例输入
asd as asadf
样例输出
26 18 39 思路:模拟题。不过需要注意的地方是更新出现次数最多的ascii码值,判断条件应该先满足出现次数最多,然后才是次数相同时,ascii码值较小。上次有道搜索题自己就是错在这里,不长记性。
#include<stdio.h> #include<string.h> #define N 10010 #define inf 0x3f3f3f3f #define LL long long char s ; LL ans,maxtime,mod,time ,num ; 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; }
相关文章推荐
- NYOJ 2356 哈希计划(模拟)
- NYOJ 2356 哈希计划(模拟)
- [模拟][哈希]刷题计划
- NYOJ 2356 哈希计划(模拟)
- noip2004 津津的储蓄计划 (模拟)
- 哈希连接的执行计划
- POJ 1840 Eqs(模拟+哈希)
- JZOJ 3804. 【NOIP2014模拟8.24】小X 的AK 计划
- C#模拟windows xp中的定时计划任务
- 在ASP.NET中模拟Windows服务运行计划任务
- poj 1573 Robot Motion 【模拟】【刷题计划】
- 【模拟】【NOIP2004提高组】津津的储蓄计划
- [哈希&&模拟]Happy Number uva10591
- [NOIp复习计划]:模拟
- 【NOI2014模拟7.11】【WC2008游览计划加强】挖宝藏
- 第六章――根据执行计划优化性能(1)――理解哈希、合并、嵌套循环连接策略
- POJ训练计划3087_Shuffle'm Up(模拟)
- POJ1002 487-3279 直接哈希模拟
- 第六章——根据执行计划优化性能(1)——理解哈希、合并、嵌套循环连接策略
- JZOJ 4740 【雅礼联考GDOI2017模拟9.2】Zjr506的捕猫计划