0209-0217校赛部分题解
SMU Winter 2024 Round #3 (Div.2)
对于自己比较有价值的题目是
D题 https://codeforces.com/gym/102897/problem/D?mobile=true
J题 https://codeforces.com/gym/102897/problem/J
K题 https://codeforces.com/gym/102897/problem/K
E题 https://codeforces.com/gym/102897/problem/K
D题
题目看似很长一大串,非常吓人,但实际上只需要抓住两个关键词:回文字符串被分割 后 的最长长度,我们要记住,单个字符就是一个回文字符串。那么问题就很好解决了,只需要统计总共出现过几个字母就行啦
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int sum;
void solve()
{
string s;
cin>>s;
sum+=s.size();
}
signed main()
{
int t;
cin>>t;
while(t--)
{
solve();
}
cout<<sum;
return 0;
}
J题
这题其实就是在统计出现过的字符种类数,但是每种可能出现多次,那么我们便可以想到一个不存在重复元素的容器set容器,介绍一些set的基础操作,set 的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就像一个集合一样。
s.begin() 返回指向第一个元素的迭代器
s.end() 返回指向最后一个元素的迭代器
s.clear() 清空所有元素
s.empty() 检查集合是否为空 若空返回true
s.insert() 在集合中插入元素
s.size() 集合中的元素数目
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int lj(string&str)
{
set<char> q;
for(char c:str){
if(c!='.') q.insert(c);
}
return q.size();
}
void solve()
{
int n,sum=0;
cin>>n;
while(n--)
{
string s;
cin>>s;
sum+=lj(s);
}
cout<<sum<<endl;
}
int main()
{
int t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}
E题
这一题就是输出图案就行,但是注意‘/’要使用转义字符就是在printf里输入两个//
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
printf(" __ _____\n");
printf("| | ___/ ____\\____\n");
printf("| |/ /\\ __\\/ ___\\\n");
printf("| < | | \\ \\___\n");
printf("|__|_ \\ |__| \\___ >\n");
printf(" \\/ \\/");
return 0;
}
K题 还不会嘿嘿
VJ第三次选拔赛
D题 https://codeforces.com/gym/103488/problem/D
题目要我们找ybb开头,而后还是bbb.....的字符串,如ybb,ybbb,ybbbb在ybbb里计数为两次,因为有ybb和ybbb,其他的同理,我们可以找到ybb以后计数加一,然后统计ybb以后有多少个b即可,开个双指针即可
点击查看代码
#include <bits/stdc++.h>
using namespace std;
void solve()
{
int n,cnt=0;
cin>>n;
string s;
cin>>s;
for(int i=0,j=0;i<s.size();i++)
{
if(s[i]=='y'&&s[i+1]=='b'&&s[i+2]=='b')
{
cnt++;
for(int j=i+3; ;j++)
{
if(s[j]=='b') cnt++;
else break;
}
}
}
cout<<cnt<<endl;
}
int main()
{
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
H题 https://codeforces.com/gym/103488/problem/H
这一题要注意推理,MEX=n时有一种情况,序列为1、2、3...n-1,MEX=0的时候,序列不含0,每个数可以选或者不选有2^(n-1) 种情况,MEX=1的时候,含0不含1,每个数选或不选有2^(n-2) 种,依次推下去,MEX为i时,序列不含i,必须含0~i-1,然后剩下的n-i-1个数每个数可以选或者不选,就是2^(n-i-1) 种,通过列项相消就可以得出MEX=2^n -1种,通过快速幂然后取余即可
快速幂:其实就是用记忆化递归,给个模板
点击查看代码
ll qpow(ll a,ll n)
{
if(n==0) return 1;
else if(n%2==1){
return a*qpow(a,n-1)%mod;
}
else{
ll temp=qpow(a,n/2);
return temp*temp%mod;
}
}
题解来啦
点击查看代码
#include <bits/stdc++.h>
using namespace std;
const long long mod=998244353;
typedef long long ll;
ll qpow(ll a,ll n)
{
if(n==0) return 1;
else if(n%2==1){
return a*qpow(a,n-1)%mod;
}
else{
ll temp=qpow(a,n/2);
return temp*temp%mod;
}
}
void solve()
{
int n,k,ans;
cin>>k;
ans=qpow(2,k)-1;
cout<<ans<<"\n";
}
signed main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int t;
cin>>t;
while(t--)
{
solve();
}
}
L题 https://codeforces.com/gym/103488/problem/L
这一题其实就是要记得两个点ybba和ybb相比 ybba的字典序更大,所以遇到结尾为a的就去掉a 不是a的就把末尾改为a再添加z即可,利用一下string的find函数找最后一位,先开个26个字母的字符串
点击查看代码
#include <bits/stdc++.h>
using namespace std;
string al="abcdefghigklmnopqrstuvwxyz";
void solve()
{
int n,m;
cin>>n>>m;
string s;
cin>>s;
int pos=al.find(s[n-1]);//利用查找函数
if(s[n-1]!='a'){
s[n-1]=al[pos-1];
for(int i=0;i<m-n;i++)
{
s+='z';
}
}
else s.erase(s.size()-1);//删除最后一位字母a
cout<<s;
}
int main()
{
int t=1;
while(t--)
{
solve();
}
return 0;
}
牛客基础训练营
A题 https://ac.nowcoder.com/acm/contest/67743/A
简单的比较首字符是否相同 忽略大小写 用string a b就可以啦
点击查看代码
#include <bits/stdc++.h>
using namespace std;
void solve()
{
string a,b;
cin>>a>>b;
if(a[0]==b[0]||a[0]==b[0]-32||a[0]-32==b[0]) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
int main()
{
int t;
cin>>t;
while(t--)
{
solve();
}
}
L题 https://ac.nowcoder.com/acm/contest/67743/L
简单的遍历 用stoi把字符串类型转化为整数
点击查看代码
#include <bits/stdc++.h>
using namespace std;
void solve()
{
int n,k,res=0;
string s[1005],s1;
cin>>n;
for(int i=1;i<=n;i++) cin>>s[i];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(j!=i){//这样写就相当于你从左开始遍历一次,从右又开始遍历一次
s1=s[i]+s[j];
k=stoi(s1);//字符串转为整数
if(k%36==0) res++;
}
}
}
cout<<res;
}
int main()
{
int t=1;
while(t--)
{
solve();
}
}
posted on 2024-02-17 03:04 swj2529411658 阅读(32) 评论(0) 收藏 举报
浙公网安备 33010602011771号