社区讨论
求问暴力分数
P14363[CSP-S 2025] 谐音替换参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhiy3chx
- 此快照首次捕获于
- 2025/11/03 17:36 4 个月前
- 此快照最后确认于
- 2025/11/03 17:36 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,q,sd=0,op=0,qp=0,hp=0,os=0,oi=0,bk=0,ioi=0;
struct one{
string s1,s2,s3,s4;
int q,h;
}a[200005];
struct two{
string s1,s2;
};
vector<two> v[200005];
map<string,int> mp;
string t1,t2,tt1,tt2;
int main(){
cin>>n>>q;
sd=0;
bk=0;
for(int i=1;i<=n;i++){
cin>>a[i].s1>>a[i].s2;
a[i].q=a[i].h=0;
ioi=0;
for(int j=0;j<a[i].s1.size();j++){
if(a[i].s1[j]==a[i].s2[j]){
a[i].q++;
}
else{
break;
}
}
for(int j=a[i].s1.size()-1;j>=0;j--){
if(a[i].s1[j]==a[i].s2[j]){
a[i].h++;
}
else{
break;
}
}
a[i].s3=a[i].s4="";
for(int j=a[i].q;j<a[i].s1.size()-a[i].h;j++){
a[i].s3+=a[i].s1[j];
a[i].s4+=a[i].s2[j];
}
t1=t2="";
for(int j=a[i].q-1;j>=0;j--){
t1+=a[i].s1[j];
}
for(int j=a[i].s1.size()-a[i].h;j<a[i].s1.size();j++){
t2+=a[i].s1[j];
}
if(bk==0) for(int j=0;j<a[i].s1.size();j++){
if((a[i].s1[j]!='a'&&a[i].s1[j]!='b')||(a[i].s2[j]!='a'&&a[i].s2[j]!='b')){
ioi=1;
break;
}
}
if(ioi==1){
bk=1;
}
//cout<<a[i].s3<<" "<<a[i].s4<<" "<<a[i].q<<" "<<a[i].h<<endl;
if(mp[(string)(a[i].s3+">"+a[i].s4)]==0){
mp[(string)(a[i].s3+">"+a[i].s4)]=++sd;
v[sd].push_back({t1,t2});
}
else{
v[mp[(string)(a[i].s3+">"+a[i].s4)]].push_back({t1,t2});
}
}
for(int i=1;i<=q;i++){
cin>>t1>>t2;
if(t1.size()!=t2.size()){
cout<<0<<endl;
}
else{
op=0;
qp=hp=0;
for(int j=0;j<t1.size();j++){
if(t1[j]==t2[j]){
qp++;
}
else{
break;
}
}
for(int j=t1.size()-1;j>=0;j--){
if(t1[j]==t2[j]){
hp++;
}
else{
break;
}
}
tt1=tt2="";
for(int j=qp;j<t1.size()-hp;j++){
tt1+=t1[j];
tt2+=t2[j];
}
os=mp[(string)(tt1+">"+tt2)];
//cout<<os<<endl;
if(bk!=0){
for(int j=0;j<v[os].size();j++){
//cout<<v[os][j].s1.size()<<" "<<qp<<" "<<v[os][j].s2.size()<<" "<<hp<<endl;
if(v[os][j].s1.size()<=qp&&v[os][j].s2.size()<=hp){
oi=0;
for(int o=0;o<v[os][j].s1.size();o++){
if(v[os][j].s1[o]!=t1[qp-o-1]){
oi=1;
break;
}
}
//cout<<oi<<endl;
if(oi==0){
for(int o=0;o<v[os][j].s2.size();o++){
if(v[os][j].s2[o]!=t1[t1.size()-hp+o]){
oi=1;
break;
}
}
}
if(oi==0){
op++;
}
}
}
cout<<op<<endl;
}
else{
for(int j=0;j<v[os].size();j++){
//cout<<v[os][j].s1.size()<<" "<<qp<<" "<<v[os][j].s2.size()<<" "<<hp<<endl;
if(v[os][j].s1.size()<=qp&&v[os][j].s2.size()<=hp){
op++;
}
}
cout<<op<<endl;
}
}
}
return 0;
}
该代码思路为考场思路,luogu80分,TLE9,10,15,16,求问能有多少分
回复
共 1 条回复,欢迎继续交流。
正在加载回复...