社区讨论

求问暴力分数

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 条回复,欢迎继续交流。

正在加载回复...