(江西财经大学第二届程序设计竞赛同步赛)E-是不是复读机
E-是不是复读机
题目描述:
在复读纪元2140年,复读机(们)已经放弃了如下所示的低级复读方式:
“哟,小伙汁,想不到你也是个复读机”
“哟,小伙汁,想不到你也是个复读机”
而是进化出了一种新的复读技巧:语义复读,即能复读出字面上高度相似的句子(单词顺序不一定一样)。譬如,在发生以下对话时,我们可以认为,参与对话的两人中存在复读机:
“I am not a repeater”
“I am not a repeater too”
现在我就来教你如何辨认复读机.
- 提取出所有的单词,并统计每一句中的词频。
2.通过余弦相似度算法进行相似度分析。
我们知道,在二维向量中,假设a向量是(x1, y1),b向量是(x2, y2),那么可以将余弦定理改写成下面的形式:
将我们之前提取出的词频看成2个n维向量,可得到(1,1,1,1,1,0)和(1,1,1,1,1,1)两个向量,进行余弦计算,可得到
我们认为其相似度为0.912,当相似度不小于90%时,我们就认为对话的两人中,存在复读机。
输入描述
输入包括两行由数字(0-9)、英文字符(a-z、A-Z)和空格组成的字符串。其中单词之间通过空格分隔且不区分大小写,即我们认为“At”、“at”、“AT”、“aT”为同一个单词。每个字符串总长度不超过2000.
输出描述:
在一行中输出结果,如果存在复读机,则输出“Yes”,否则输出“No”,不包含双引号。
示例1
输入
I am not a reapter
I am not a reapter too
输出
Yes
示例2
输入
Excuse me Can you tell me how much the shirt is
Yes it is nine fifteen
输出
No
思路解析:
知识点复习:substr
/*
string s = “0123456789”;
string sub1 = s.substr(5);一个数字:表示从下标为5开始一直到结尾:
sub1 = “56789”
string sub2 = s.substr(5, 3);从下标为5开始截取长度为3位:
sub2 = “567”
*/
样例中两句话要分别记录每个单词出现的次数,所以可以想到用两个map<string,int>容器去储存单词的次数,并且用set集合(不重复且自动排序的容器)去储存出现过的单词。
最后不用输入原句,所以可以将两句话全部转为大写或小写形式,便于在map映射和set集合中单词的处理。
这道题精髓的地方应该是如何在一串字符串中用substr切割每个单词。
需要使用string中的find函数去找空格。
当字符串不为空时,找到第一个空格的下标p,然后用一个新命名的string s变量暂时储存空格前的内容,也就是字符串头到空格下标p之间的内容,用substr(0,p)操作截取一个单词并用set集合中的insert插入到容器,这个string变量的map映射值也将相应加1,再循环以上操作,直到字符串剩下最后一个单词时,再单独特判:s != “” && s != " "
代码:
#include<bits/stdc++.h>
using namespace std;
int main() {string s1, s2, s;getline(cin, s1);getline(cin, s2);set<string> st;map<string, int> mp1, mp2;int i; for (i = 0; i < s1.length(); i++) {if (s1[i] >= 'A' && s1[i] <= 'Z') s1[i] = tolower(s1[i]);}for (i = 0; i < s2.length(); i++) {if (s2[i] >= 'A' && s2[i] <= 'Z') s2[i] = tolower(s2[i]);}int p = s1.find(" ");while (p != string::npos) {s = s1.substr(0, p);st.insert(s);s1 = s1.substr(p+1);mp1[s] += 1;p = s1.find(" ");}if (s1 != "" && s1 != " ") {st.insert(s1);mp1[s1] += 1;}p = s2.find(" ");while (p != string::npos) {s = s2.substr(0, p);st.insert(s);s2 = s2.substr(p+1);mp2[s] += 1;p = s2.find(" ");}if (s2 != "" && s2 != " ") {st.insert(s2);mp2[s2] += 1;}int up = 0, down1=0, down2 = 0;for (set<string>::iterator it = st.begin(); it != st.end(); it++) {up += mp1[*it]*mp2[*it];down1 += mp1[*it]*mp1[*it];down2 += mp2[*it]*mp2[*it];}double sum = up*1.0/(sqrt(down1)*sqrt(down2)*1.0);if (sum >= 0.9000)cout << "Yes";elsecout << "No" ;return 0;
}
(江西财经大学第二届程序设计竞赛同步赛)E-是不是复读机相关推荐
- 江西财经大学第二届程序设计竞赛同步赛 H大时钟 (扩展欧几里得)
链接:https://ac.nowcoder.com/acm/contest/635/H 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 江西财经大学第二届程序设计竞赛同步赛----E-是不是复读机
首先发出题目链接: 链接:https://ac.nowcoder.com/acm/contest/635/E 来源:牛客网 题目如下: 看完题目之后就有两个问题摆在面前: (1)题目输入的是一串英文, ...
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解
"科林明伦杯"哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解 萌新又来写题解啦 原题链接 B 减成一 题意:存在n个数,每次操作可以任选一个区间使得区间内的所有数字减一.问最少多 ...
- 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛题解
A,C,I签到题,只搞了8题,还一题是神仙做的,我不会 链接:https://www.nowcoder.com/acm/contest/122/B 来源:牛客网 取石子 时间限制:C/C++ 1秒,其 ...
- 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 - 题解
A - ID and password 题目描述 Users prefer simple passwords that are easy to remember, but such passwords ...
- 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 部分题解
A-ID and password 签到题. #include <iostream> #include <cstdio> #include <bits/stdc++.h& ...
- 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛B 取石子(博弈SG函数模板)
题目链接:取石子 链接:https://www.nowcoder.com/acm/contest/122/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65 ...
- 江西财经大学第一届程序设计竞赛 G题小Q的口袋校园
题目链接:https://www.nowcoder.com/acm/contest/115/G 解题思路:题解就一份代码,贪心的思想.先按开始时间进行排序. 然后不断贪心获得happy[ j ]的最大 ...
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)---全题目+题解
文章目录 A.点对最大值 B.减成一 C.面积 D.扔硬币 E.赛马 F.三角形 G.养花 H.直线 I.字典序 J.最大值 A.点对最大值 链接:https://ac.nowcoder.com/ac ...
最新文章
- oracle循环插入数据用于测试
- 【进展】冰箱运行监测系统:进展汇报,顺理思路
- 关于 paddingFactor 及 COLLMOD 的设置值
- oracle em 删除 重建,Oracle 11g 重建EM需要删除的对象
- Android IOS WebRTC 音视频开发总结(六二)-- 大数据解密国外实时通讯行业开发现状...
- VS2010在C#头文件添加文件注释的方法
- MYSQL GROUP BY 对多个字段进行分组
- [转]DES加密 java与.net可以相互加密解密两种方法
- asp.net oracle连接数据库,ASP.NET连接Oracle数据库的步骤详解
- java graphics dispose_Graphics.Dispose 方法 (System.Drawing) | Microsoft Docs
- Linux文件夹打包拷贝到window下
- 海量图标矢量图免费下载【来自阿里】
- 立创3D文件转成stp文件应用到AD中
- linux下nginx重启命令
- sersync+rsync的热备份研究(热备+断点续传)
- 【传统CV】Anovel adaptive morphological approach for degraded character image segmentation
- 8086CPU结构与功能
- Mysql出现问题:ERROR 2058: Plugin caching_sha2_passward could not be loaded解决方案
- OLTP和OLAP的区别?
- 奥运会数据集分析(部分)
热门文章
- POJ-1861-Network 解题报告
- vue 手写 移动端 左右滑动 防止上下滑动冲突 超过宽度一半切换
- 基于CSS3实现元素宽度向两侧延伸
- jQuery源码研究学习笔记(二)
- 7-227 寻找大富翁 (25 分)
- JavaWeb项目实战(2)安装JDK和Tomcat以及Eclipse构造开发环境
- js list操作_使用 Node.js 实现一个命令行 todo-list(1)- 基本功能
- 最经典的Linux入门命令
- java 末级递归树_如何递归获取json里末级章节名称
- UVA - 820 Internet Bandwidth(最大流模板题)