训练情况
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;
}