CSP历年复赛题-P1308 [NOIP2011 普及组] 统计单词数
原题链接:https://www.luogu.com.cn/problem/P1308
题意解读:给定单词a,文本b,在b中找a的个数,并找a第一次出现的位置,注意b中任何位置可能含有多个连续空格。
解题思路:
通过双指针找b中每一个单词的首、尾位置i,j,与a进行一一比较即可。
注意1:比较时不考虑大小写,可以统一转成小写字符tolower()
注意2:如果写比较函数,不要把文本b作为参数传递,否则会超时,除非加引用string &b
注意3:输入要用getline(cin, str)
100分代码:
#include <bits/stdc++.h>
using namespace std;
string a, b;
int cnt = 0, first = -1, pos = 0;
//判断a与b[l]~b[r-1]是否相等
bool cmp(int l, int r)
{
if(a.size() != r - l) return false;
for(int i = 0; i < a.size(); i++)
{
if(tolower(a[i]) != tolower(b[l + i]))
return false;
}
return true;
}
int main()
{
getline(cin, a);
getline(cin, b);
for(int i = 0; i < b.size(); i++)
{
if(b[i] != ' ') //找到一个单词的首字符
{
int j = i;
while(b[j] != ' ' && j < b.size()) j++; //找到一个单词的末尾+1的位置
if(cmp(i, j))
{
cnt++;
if(first == -1) first = i;
}
i = j;
}
}
if(cnt > 0) cout << cnt << " " << first;
else cout << -1;
return 0;
}
分类:
CSP-J复赛真题解析
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!