镇江网站排名公司pc网站做移动适配
镇江网站排名公司,pc网站做移动适配,设计官网推荐,职业生涯规划大赛点评P3370 【模板】字符串哈希
题目描述
如题#xff0c;给定 N 个字符串#xff08;第 i 个字符串长度为 Mi#xff0c;字符串内包含数字、大小写字母#xff0c;大小写敏感#xff09;#xff0c;请求出 N 个字符串中共有多少个不同的字符串。
友情提醒#xff1a;如…P3370 【模板】字符串哈希题目描述如题给定 N 个字符串第 i 个字符串长度为 Mi字符串内包含数字、大小写字母大小写敏感请求出 N 个字符串中共有多少个不同的字符串。友情提醒如果真的想好好练习哈希的话请自觉。输入格式第一行包含一个整数 N为字符串的个数。接下来 N 行每行包含一个字符串为所提供的字符串。输出格式输出包含一行包含一个整数为不同的字符串个数。输入输出样例输入 #1复制5 abc aaaa abc abcc 12345输出 #1复制4说明/提示数据范围对于 30% 的数据N≤10Mi≈6Mmax≤15。对于 70% 的数据N≤1000Mi≈100Mmax≤150。对于 100% 的数据N≤10000Mi≈1000Mmax≤1500。样例说明样例中第一个字符串 abc 和第三个字符串 abc 是一样的所以所提供字符串的集合为 {aaaa,abc,abcc,12345}故共计 4 个不同的字符串。拓展阅读以下的一些试题从不同层面体现出了字符串哈希算法的正确性分析。P12197 Hash Killer IP12198 Hash Killer IIP12199 目前无解Hash Killer IIIP12200 Hash Killer ExtraP12201 Hash Killer PhantasmP7350 「MCOI-04」Dream and Strings#includeiostream #includestring #includemap using namespace std; map string, int mp; int main() { int n; cin n; while (n--) { string s; cin s; mp[s]; } cout mp.size(); return 0; }P1102 A-B 数对题目背景出题是一件痛苦的事情相同的题目看多了也会有审美疲劳于是我舍弃了大家所熟悉的 AB Problem改用 A-B 了哈哈题目描述给出一串正整数数列以及一个正整数 C要求计算出所有满足 A−BC 的数对的个数不同位置的数字一样的数对算不同的数对。输入格式输入共两行。第一行两个正整数 N,C。第二行N 个正整数作为要求处理的那串数。输出格式一行表示该串正整数中包含的满足 A−BC 的数对的个数。输入输出样例输入 #1复制4 1 1 1 2 3输出 #1复制3说明/提示对于 75% 的数据1≤N≤2000。对于 100% 的数据1≤N≤2×1050≤ai2301≤C230。2017/4/29 新添数据两组#includeiostream #includeunordered_map using namespace std; typedef long long LL; const int N 2e5 10; LL arr[N]; //直接开数组不行要用map unordered_map LL,LL mp; int main() { LL n, c; cin n c; LL cnt 0; for (int i 1;i n;i) cin arr[i]; for (int i 1;i n;i) { //不同位置的数字一样的数对算不同的数对 cnt mp[arr[i] - c]; //可以是BA-C //也可以是BAC即AB-C cnt mp[arr[i] c]; //标记出现过的数 mp[arr[i]]; } cout cnt; return 0; }P1059 [NOIP 2006 普及组] 明明的随机数题目描述明明想在学校中请一些同学一起做一项问卷调查为了实验的客观性他先用计算机生成了 N 个 1 到 1000 之间的随机整数 (N≤100)对于其中重复的数字只保留一个把其余相同的数去掉不同的数对应着不同的学生的学号。然后再把这些数从小到大排序按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。输入格式输入有两行第 1 行为 1 个正整数表示所生成的随机数的个数 N。第 2 行有 N 个用空格隔开的正整数为所产生的随机数。输出格式输出也是两行第 1 行为 1 个正整数 M表示不相同的随机数的个数。第 2 行为 M 个用空格隔开的正整数为从小到大排好序的不相同的随机数。输入输出样例输入 #1复制10 20 40 32 67 40 20 89 300 400 15输出 #1复制8 15 20 32 40 67 89 300 400说明/提示NOIP 2006 普及组 第一题用set自带排序和去重功能。#includeiostream #includeset using namespace std; set int arr; int main() { int m; cin m; while (m--) { int x; cin x; arr.insert(x); } cout arr.size() endl; for (auto e : arr) cout e ; cout endl; return 0; }P1957 口算练习题题目描述王老师正在教简单算术运算。细心的王老师收集了 i 道学生经常做错的口算题并且想整理编写成一份练习。编排这些题目是一件繁琐的事情为此他想用计算机程序来提高工作效率。王老师希望尽量减少输入的工作量比如 58 的算式最好只要输入 5 和 8输出的结果要尽量详细以方便后期排版的使用比如对于上述输入进行处理后输出 5813 以及该算式的总长度 6。王老师把这个光荣的任务交给你请你帮他编程实现以上功能。输入格式第一行一个整数 i。接着的 i 行为需要输入的算式每行可能有三个数据或两个数据。若该行为三个数据则第一个数据表示运算类型a 表示加法运算b 表示减法运算c 表示乘法运算接着的两个数据表示参加运算的运算数。若该行为两个数据则表示本题的运算类型与上一题的运算类型相同而这两个数据为运算数。输出格式输出 2×i 行。对于每个输入的算式输出完整的运算式及结果第二行输出该运算式的总长度。输入输出样例输入 #1复制4 a 64 46 275 125 c 11 99 b 46 64输出 #1复制6446110 9 275125400 11 11*991089 10 46-64-18 9说明/提示【数据规模与约定】对于 50% 的数据输入的算式都有三个数据。对于所有数据0i≤50第一个算式一定有三个数据运算数为非负整数且小于 10000。#includeiostream #includestring using namespace std; string input, ret, num1, num2; char ope, last_ope; typedef long long LL; LL num; int main() { int n; cin n; int i; //清除缓冲区中残留的换行符 cin.ignore(); while (n--) { //如果直接cininput遇到空格就会停止所以要用getline getline(cin, input); int n input.size(); if (input[0] a || input[0] b || input[0] c) { ope input[0]; i 2; last_ope ope; } else { ope last_ope; i 0; } //处理num1和num2 while (input[i] ! ) { num1.push_back(input[i]); i; } i;//跳过空格 while (i n) { num2.push_back(input[i]); i; } //处理ret if (ope a) { num stoll(num1) stoll(num2); ret num1 num2 to_string(num); } else if (ope b) { num stoll(num1) - stoll(num2); ret num1 - num2 to_string(num); } else { num stoll(num1) * stoll(num2); ret num1 * num2 to_string(num); } cout ret endl; cout ret.size() endl; //一定不要忘了清空否则会直接在原字符串追加答案错误 num1.clear(); num2.clear(); num 0; ret.clear(); } return 0; }