NYOJ 2356 哈希计划(模拟)

题目链接:

http://acm.nyist.me/JudgeOnline/problem.php?id=2356

题目描述

众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩《金庸群侠传X》,结果进去后各种被虐,LLM就开始研究这个游戏的代码,顺便还学会了一点点点点lua语言,然后就开始了伟大的改游戏代码之旅,然后LLM发现自己too young了,这个游戏把所有的文本都进行了哈希,如果自己改了代码或者剧情文本的话它哈希出来的值就会和原来的哈希值不一样......然后游戏就会打不开.....,现在LLM发现了文本的哈希函数,要求你写个程序,功能为:

输入一段字符串,输出一个哈希值

为了简化这个问题,我们假设游戏的哈希方法是:

从第二个字符开始每个字符都对应其ACISS码的值,然后异或上一个字符的ACISS码值,然后所有的异或值相乘取余字符串中出现最多的那个字符的ACISS码值(如果有多个,则选取ACISS码最小的那个)

输入

每个测试文件不多于100组测试样例

输入包含一个只有小写字母的字符串s,

2<=s<=10000

输出

输出仅一个数字,代表答案

样例输入

asd
as
asadf

样例输出

26
18
39

提示

来源

河南省多校脸萌第六场

解题思路:

仔细按照题目模拟即可。

AC代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 char a[10010];
 4 int main()
 5 {
 6     int b[26],i,l,m,j;
 7     long long ans1,ans2;
 8     while(scanf("%s",a) != EOF)
 9     {
10         l=strlen(a);
11
12         memset(b,0,sizeof(b));
13         for(i=0;i<l;i++)
14         b[a[i]-‘a‘]++;
15         for(j=0,m=0,i=0;i<26;i++)
16         {
17             if(b[i] > j)
18             {
19                 j=b[i];
20                 m=i;//找到出现次数最多的字母
21             }
22         }
23
24         ans1 = a[0]-‘a‘+97;
25         for(i=1;i<l;i++)//按题意模拟
26         {
27             ans1 = (a[i-1]-‘a‘+97) ^ (a[i]-‘a‘+97);
28             if(i==1)
29             ans2 = ans1;
30             else
31             {
32                 ans2 *= ans1;
33                 ans2 %= (m+97);
34             }
35         }
36         printf("%lld\n",ans2);
37     }
38     return 0;
39 }
时间: 2024-10-05 04:27:23

NYOJ 2356 哈希计划(模拟)的相关文章

NYOJ 2356: 哈希计划【模拟】

题目描述 众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩<金庸群侠传X>,结果进去后各种被虐,LLM就开始研究这个游戏的代码,顺便还学会了一点点点点lua语言,然后就开始了伟大的改游戏代码之旅,然后LLM发现自己too young了,这个游戏把所有的文本都进行了哈希,如果自己改了代码或者剧情文本的话它哈希出来的值就会和原来的哈希值不一样......然后游戏就会打不开.....,现在LLM发现了文本的哈希函数,要求你写个程序,功能为: 输入一段字符串,输出一个哈希值 为了

poj——3349 哈希加模拟

题目难点在于对两片雪花的比较,哈希可以加快搜索速度,防止超时,而对于如何逆时针和顺时针比较雪花是否相同便成为重点. 在这里给出两条公式: 设i为A.B的第i片叶子,j为B当前顺时针转过的格数 那么  A(i) ---> B( (i+j)%6 ) 设i为A.B的第i片叶子,j为B当前逆时针转过的格数 那么  A(i) ---> B( (5-i-j+6)%6 ) #include <iostream> using namespace std; #define mod 999983 ty

nyoj 弹球II(数学 模拟)

弹球II 时间限制:1000 ms  |  内存限制:65535 KB 描述 游戏厅里有一种很常见的游戏机,里面有很多根管子有规律地排成许多行.小球从最上面掉下去,碰到管子会等概率地往管子左边或者右边的空隙掉下去.不过在最靠边的小球只会往一边掉(如图,灰色小球只可能掉到右边空隙).现在已知共2 * n - 1行管子,第i行有Ai个管子,如果i是奇数,那么Ai等于m,如果i是偶数,Ai等于m - 1.小球从第1行第k个管子右边掉下去,要求小球从最后一行各个出口掉出来的概率. 输入 第一行是一个整数

nyoj 63(小猴子下落)(模拟,二叉树)

小猴子下落 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 有一颗二叉树,最大深度为D,且所有叶子的深度都相同.所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1.在结点1处放一个小猴子,它会往下跑.每个内结点上都有一个开关,初始全部关闭,当每次有小猴子跑到一个开关上时,它的状态都会改变,当到达一个内结点时,如果开关关闭,小猴子往左走,否则往右走,直到走到叶子结点. 一些小猴子从结点1处开始往下跑,最后一个小猴儿会跑到哪里呢? 输入 输入二叉树叶

Android编程示例:创建机场计划模拟器应用程序

在本文中,我们将演示如何使用Android Studio和Java编程语言创建一个示例Android应用程序,从"临时"实现高级响应用户界面的功能.本文中讨论的应用程序将实现机场航班时刻表模拟的功能.在开发生命周期中,我们将实现Android应用程序的响应式用户界面,用于呈现"到达"和"离开"航班的列表,并提供动态生成和更新实时模式中的航班信息的功能. 我们将大力强调几个Java语言编程方面,并深入研究允许我们提供高级Android应用程序的编程

AcWing 840. 模拟散列表

拉链法 #include<cstring> #include<iostream> using namespace std ; const int N=100003; int h[N],e[N],ne[N],idx; void insert(int x) { int k=(x%N+N)%N;//哈希函数 //模拟单链表 e[idx]=x;//先存下来 ne[idx]=h[k];//指向负1 h[k]=idx++;//原来的数字指向idx } bool find(int x) { in

PKU1002 487-3279

英文: Description Businesses like to have memorable telephone numbers. One way to make a telephone number memorable is to have it spell a memorable word or phrase. For example, you can call the University of Waterloo by dialing the memorable TUT-GLOP.

noip2004提高组题解

这次有两道题以前已经做过了,所以分数什么的也没有意义了.发现这年的难度设置极不靠谱,前三题都比较简单,最后一题太难,不知道出题人怎么想的. 第一题:储蓄计划 模拟. 第二题:合并果子 贪心.每次选最小的两堆合并. 第三题:合唱队形 两次动规.题目可以转化为找出一个人,使得以他为尾的最长上升子序列的长度最大,并且以他为首的最长下降子序列的长度也最大. 第四题:虫食算 马上想到搜索.但是规模太大,N可能有26位,如果简单枚举那么运算次数是26!≍4e27:剪枝方面只想到一个很弱的剪枝(对于26的规模

iptables之一

扩展:multiport.iprange.connlimit.limit.time.string{kmp|bm} state [NEW.ESTABLISHED.RELATED.INVALID],作为一个主机防火墙,我们本机出去,本机服务器 对服务器而言,很少需要主动发起新请求去连接别的机子.因为要在OUTPUT,很多情况下要放行ESTABLISHED和RELATED,对于INPUT也是,而NEW很少放行,放行也仅是放行客户端建立连接的服务. 如TCP 80开放NEW. 优化的规则:尽量减少规则条