1 条题解
-
0
[COCI 2025/2026 #1] 押韵 / Rima
题意
给定 行,每行有 个字符串,每四行为一段。
我们称两个句子是押韵的,当且仅当这两句话的最后一个单词的最后 个字母相同。特别地,若某句中最后一个单词不足 个字母,认为这两句不押韵。
现在有三种押韵模式:
- :一二句押韵,三四句押韵;
- :一三句押韵,二四句押韵;
- :一四句押韵,二三句押韵。
我们现在要统计这三种押韵模式在每段中出现的次数,当然一段可能会出现多种押韵模式。
思路
我们可以用一个数组 来储存每行的最后一个字符串,然后写一个函数来判断每段中字符串长度是否大于 同时是否押韵,若是,返回 ,否则返回 。
代码
#include<bits/stdc++.h> #define int long long using namespace std; int n,m,k,d1,d2,d3; string s[1000086],ss; bool d(string s1,string s2,int kk){ return s1.size()>=kk&&s2.size()>=kk//判断长度是否大于k &&s1.substr(s1.size()-kk)==s2.substr(s2.size()-kk);//判断最后k个字符是否相同 } signed main(){ cin>>n>>m>>k; for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++){ cin>>ss; } s[i]=ss;//直接统计每行最后一个输入进来的字符串 } for (int i=1;i<=n;i+=4){//每次按段循环 if (d(s[i],s[i+1],k)&&d(s[i+2],s[i+3],k)){ d1++;//AABB } if (d(s[i],s[i+2],k)&&d(s[i+1],s[i+3],k)){ d2++;//ABAB } if (d(s[i],s[i+3],k)&&d(s[i+1],s[i+2],k)){ d3++;//ABBA } } cout<<d1<<' '<<d2<<' '<<d3<<'\n'; return 0; }
- 1
信息
- ID
- 12614
- 时间
- 1000ms
- 内存
- 650MiB
- 难度
- 4
- 标签
- 递交数
- 31
- 已通过
- 16
- 上传者