【vjudge训练记录】大一寒假专项训练——字符串

训练情况

A题

第十届中国大学生程序设计竞赛(济南)-(CCPC2024-Jinan)签到题

我们取第一行第一个和后面的进行比较,如果不同的次数超过1次,就说明第一行第一个是不同的那个,如果不同的次数刚好为1次,比较的那个字符串是不同的那个。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'

using namespace std;

void solve(){
    int n,m,k;
    cin>>n>>m>>k;
    vector<string> s(n);
    for(int i = 0;i<n;i++) cin>>s[i];
    string base = s[0].substr(0,k);
    int ansn = 0,ansm = 0;
    int cnt = 0;
    for(int i = 0;i<n;i++){
        for(int j = 0;j<m*k;j+=k){
            if(s[i].substr(j,k) != base){
                cnt++;
                ansn = i;
                ansm = j/k;
            }
        }
    }
    if(cnt>1) ansn = 0,ansm = 0;
    cout<<ansn+1<<" "<<ansm+1<<endl;
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

B题

字符串比较。统计不同的位数

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    string s; cin>>s;
    string t = "codeforces";
    int ans = 0;
    for(int i = 0;i<t.size();i++){
        if(s[i] != t[i]) ans++;
    }
    cout<<ans<<endl;
}

signed main(){
    int T; cin>>T; while(T--)
    solve();
    return 0;
}

C题

输出第一个字符+UPC

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    string s; cin>>s;
    string ss = s.substr(0,1);
    cout<<ss + "UPC";
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}

D题

字符串翻转,p变q,q变p,w不变

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    string s; cin>>s;
    int n = s.size();
    for(int i = n-1;~i;i--){
        if(s[i] == 'p') cout<<"q";
        else if(s[i] == 'q') cout<<"p";
        else cout<<s[i];
    }
    cout<<endl;
}

signed main(){
    int T; cin>>T; while(T--)
    solve();
    return 0;
}

E题

2023-2024 ICPC, NERC, Northern Eurasia Onsite (2023ICPC北亚决赛)签到题

枚举字符串的分割位置,统计左右两边的L个数和O个数,如果不一样则输出这一位,不存在输出-1

示例代码使用前后缀和进行处理,赛时有看到统计前缀L和O的个数,最后再用总和去减求出后缀个数,代码实现会更简单。

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'

using namespace std;

void solve(){
    int n; cin>>n;
    string s; cin>>s;
    vector<int> pl(n + 1),sl(n + 1),po(n + 1),so(n + 1);
    for(int i = 0;i<s.size();i++){
        if(s[i] == 'L') pl[i]++,sl[i]++;
        else if(s[i] == 'O') po[i]++,so[i]++;
    }
    for(int i = 1;i<n;i++) pl[i]+=pl[i-1],po[i]+=po[i-1];
    for(int i = n-2;~i;i--) sl[i]+=sl[i+1],so[i]+=so[i+1];
    for(int i = 0;i<n-1;i++){
        if(po[i]!=so[i+1]&&pl[i]!=sl[i+1]){
            cout<<i+1<<endl;
            return;
        }
    }
    cout<<-1<<endl;
}

signed main(){
    // int T; cin>>T; while(T--)
    solve();
    return 0;
}
posted @ 2025-01-17 18:00  MNNUACM_2024ZY  阅读(51)  评论(0)    收藏  举报