目录
1-L1-094 剪切粘贴
2-L1-050 倒数第N个字符串
3-L2-049 鱼与熊掌
4-L1-101 别再来这么多猫娘了!
5-L1-103 整数的持续性
6-L1-080 乘法口诀数列
第一题
注意 : 因为要插入的地方前面是一个字符串,后面也是一个字符串,所以我们可以直接查找这两个字符串拼接后形成的新的字符串
另外补充:string中的一些函数
删除:s.erase(起始下标,删除子串的长度);
插入:s.insert(起始下标,插入的子串);
替换:s.replace(起始的下标,更换的子串的长度,要更换的子串);
查找:s.find(要查找的子串) e g: if(s.find("点个赞吧")!=string::npos) xxxxxx
AC Code:
#include
using namespace std;
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
signed main()
{
IOS
string s;
cin>>s;
int n;
cin>>n;
for(int i=0;i>a>>b;
cin.ignore();
a--;
string s1,s2;
cin>>s1;
cin>>s2;
string temp;
temp = s.substr(a,b-a);
s.erase(a,b-a);
if(s.find(s1+s2)!=string::npos)
{
s.insert(s.find(s1+s2)+s1.size(),temp);
}
else
{
s+=temp;
}
}
cout<
第二题
这个题重在思路,如果正常模拟的话会很麻烦,但是仔细观察会发现其实就是一个进制问题,类比十进制或者26进制,手推几个简单的例子规律就出来了,只需要从后往前一项一项的填即可
废话不多说:
AC Code:
#include
using namespace std;
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
signed main()
{
IOS
int l,n;
cin>>l>>n;
int sum = pow(26,l);
sum = sum - n;
char ans[7]={0};
for(int i=l-1;i>=0;i--)
{
ans[i] = sum % 26 + 'a';
sum/=26;//可以类比十进制来写
}
// cout<
第三题
这个题需要了解一下unordered_map的用法,并且需要两个进行嵌套使用,其实是和map数组差不多的,但是用map的话他会自动排序,比较浪费时间,所以就用这个unordered_map来写(主要是因为这个题目的要求太严格了,用二元组嵌套会炸内存,用map数组会时间超限),当然也可以用结构体写。
AC Code:
#include
using namespace std;
int main() {
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n, m;
cin >> n >> m;
// map mp[10005];
unordered_map> mp;
for (int i = 0; i < n; i++) {
int k;
cin >> k;
for (int j = 0; j < k; j++) {
int num;
cin >> num;
mp[i][num]++;
}
}
int k;
int sum = 0;
cin >> k;
while (k--) {
sum = 0;
int a, b;
cin >> a >> b;
for (int i = 0; i < n; i++) {
if (mp[i][a] && mp[i][b])
sum++;
}
cout << sum << endl;
}
return 0;
}
天坑第四题
天坑题!!!
因为题目中说了违禁词是由字母组成的,而且要把违禁词替换为一个含有字母的子串,这就导致了如果违禁词中出现了 “censored ”,你找出之后直接替换为“那么这层循环不炸了吗
所以我们再找到违禁词之后,先把他替换为另一个非违禁词的字符串 ,不然也就炸了,最后再遍历一遍,把这个字符串替换为
AC Code:
#include
using namespace std;
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
int main() {
IOS
int n;
cin >> n;
cin.ignore();
string s[105];
for (int i = 0; i < n; i++) {
// getline(cin, s[i]);
cin >> s[i];
}
int sum = 0, k;
cin >> k;
cin.ignore();
string ans;
getline(cin, ans);
for (int i = 0; i < n; i++) {
while (ans.find(s[i]) != string::npos) {
int t = ans.find(s[i]);
sum++;
ans.erase(t, s[i].size());
ans.insert(t, "-_-");
}
}
if (sum >= k)
cout << sum << endl << "He Xie Ni Quan Jia!";
else
{
while(ans.find("-_-")!=string::npos)
{
int t = ans.find("-_-");
ans.erase(t,3);
ans.insert(t,"");
}
cout<
第五题-不咋难但是煮波感觉有意义
AC Code:
#include
using namespace std;
#define int long long
#define endl '\n'
int ans=0;
void solve(string s)
{
if((int)s.size()==1) return ;
ans++;
string num;
int res=1;
for(int i=0;i>a>>b;
map mp;
for(int i=a;i<=b;i++)
{
ans=0;
solve(to_string(i));
mx = max(mx,ans);
mp[ans]+=" ";
mp[ans]+=to_string(i);
}
cout<
没什么说的直接暴力就行
第六题
AC Code:
#include
using namespace std;
#define int long long
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
signed main()
{
IOS
string s;
int a,b,n;
cin>>a>>b>>n;
s+=a+'0';
s+=b+'0';
int i=0,j=1;
while(s.size()<=n)
{
int ans = (s[i]-'0')*(s[j]-'0');
s+=to_string(ans);
i++;j++;
}
for(int i=0;i