欢迎光临
我们一直在努力

打卡信奥刷题(3531)用C++实现信奥题 P10976 统计重复个数

P10976 统计重复个数

题目描述

定义 str=[s,n]str = [s, n]str=[s,n] 表示 strstrstrnnn 个字符串 sss 连接构成。

例如,str==[abc,3]==abcabcabcstr == [\\texttt{abc}, 3] == \\texttt{abcabcabc}str==[abc,3]==abcabcabc
如果可以从 s2s_2s2 中删除某些字符使其变为 s1s_1s1,则称字符串 s1s_1s1 可以从字符串 s2s_2s2 获得。

例如,根据定义,s1=abcs1 = \\tt{abc}s1=abc 可以从 s2=abdbecs2 = \\tt{ab\\red{dbe}c}s2=abdbec 获得,仅需要删除红色标识的字符。

现在给你两个字符串 s1s_1s1s2s_2s2 和两个整数 n1n_1n1n2n_2n2。由此构造得到两个字符串,其中 str1=[s1,n1]str_1 = [s_1, n_1]str1=[s1,n1]str2=[s2,n2]str_2 = [s_2, n_2]str2=[s2,n2]

请你找出一个最大整数 mmm,以满足 str=[str2,m]str = [str_2, m]str=[str2,m] 可以从 str1str_1str1 获得。

输入格式

本题有多组测试数据。测试数据不超过 100100100 组。

对于每组测试数据,分为两行:

  • 第一行输入字符串 s2s_2s2 和整数 n2n_2n2
  • 第二行输入字符串 s1s_1s1 和整数 n1n_1n1

输出格式

对于每组测试数据,输出整数 mmm 表示答案。

输入输出样例 #1

输入 #1

ab 2
acb 4
acb 1
acb 1

输出 #1

2
1

说明/提示

数据保证,s1,s2s_1,s_2s1,s2 全为小写字母构成,且 1≤∣s1∣,∣s2∣≤1001\\leq |s_1|,|s_2| \\leq 1001s1,s21000≤n1,n2≤106,n2≠00\\leq n_1,n_2\\leq 10^6,n_2\\neq 00n1,n2106,n2=0,每个测试点的测试数据不超过 100100100 组。

C++实现

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using vi=vector<int>;
using vl=vector<ll>;
using tp=tuple<int,int>;
int main(){
cin.tie(0)->sync_with_stdio(0);
string s1,s2;
int n1,n2;
while(cin>>s2>>n2>>s1>>n1){
int l1=s1.size(),l2=s2.size();
vi bt(26);
for(auto c:s1)bt[c'a']=1;
bool sf=true;
for(auto c:s2)if(bt[c'a']==0){sf=false;break;}
if(!sf){cout<<0<<endl;continue;}
vector<tp>a(l1);
int p=l11,t1=0,t2=0,sc_p=1;
while(1){
sc_p=p,t2++;
for(int i=0;i<l2;i++){
if(p+1==l1)p=0,t1++;else p++;
while(s1[p]!=s2[i]){
if(p+1==l1)p=0,t1++;else p++;
}
}
if(a[p]==tp{0,0})a[p]={t1,t2};
else break;
}
tie(t1,t2)=a[sc_p];
p=sc_p+1;
while(t2){
for(int i=l21;i>=0;i){
if(p1==1)p=l11,t1;else p;
while(s1[p]!=s2[i]){
if(p1==1)p=l11,t1;else p;
}
}
}
tie(t1,t2)=a[sc_p];
bool y=(sc_p<p);
ll M=(ll)(n1y)/(t1y)*t2,sx1=(n1y)%(t1y)+y,sx2=0;
for(auto [t1,t2]:a){
if(t1!=0&&t1<=sx1&&t2>sx2)sx2=t2;
}
M+=sx2;
cout<<M/n2<<endl;
}
return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

赞(0)
未经允许不得转载:171主机测评 » 打卡信奥刷题(3531)用C++实现信奥题 P10976 统计重复个数
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址