C.字符串外串
题目:
牛可乐定义字符串 s 的可爱度为最大的整数 k,满足存在一个长度为 k 的连续子串a和一个长度为 k的不连续子序列b,满足 a=b。给你两个整数 n,m,并且询问你是否存在长度为 n、仅由小写字母构成的字符串 t,使得 t 的可爱度恰好等于 m。如果存在,输出任意一个符合条件的字符串 t。
思路:找出无解条件,由于所构造的答案只与前后两侧的 a-z强相关,取模,只需要不停的塞入长度为 n−m 的 a-z 即可。
#include<bits/stdc++.h>
using namespace std;
int sum=0;
void slove()
{
int n,m; cin>>n>>m;
int f=1;
if(n<=m||n-m>26) f=0;
if(f)
{
cout<<"YES"<<endl;
for(int i=0;i<n;i++)
{
cout<<char('a'+i%(n-m));
}
cout<<endl;
}
else cout<<"NO"<<endl;
}
int main()
{
int t; cin>>t;
while(t--)
{
slove();
}
}
D.字符串里串
题目:给一个字符串可爱度k,在其中找到一个字串和不连续子串长度均为k的最大k
思路:贪心构造,第一段仅包含一个字符,即 a 的第一个字母,去位置前寻找;第二段包含 aa的剩余部分,可以共用这部分;或反之。
#include<bits/stdc++.h>
using namespace std;
int sum=0;
int main()
{
int n; cin>>n;
string a; cin>>a;
for(int i=0;i<26;i++)
{
int c=0,d=0;
for(int j=0;j<n;j++)
{
if(a[j]-'a'!=i) continue;
if(c!=0) sum=max(sum,n-j);
c++;
}
for(int j=n-1;j>=0;j--)
{
if(a[j]-'a'!=i) continue;
if(d!=0) sum=max(sum,j+1);
d++;
}
}
if(sum>1) cout<<sum;
else cout<<0;
}
H. 一起画很大的圆!
题目:给一个矩形边界,在其中找三个点始三点画出的圆半径最大
思路:长边上选取两个点,短边上选取一个点,且尽可能的靠近长边;
#include<bits/stdc++.h>
using namespace std;
void slove()
{
int a,b,c,d; cin>>a>>b>>c>>d;
//a,d左上
//b,d右上
//a,c左下
//b,c右下
if(b-a>d-c)
{
cout<<a<<' '<<d<<endl;
cout<<a+1<<' '<<d<<endl;
cout<<b<<' '<<d-1<<endl;
}
else
{
cout<<a<<' '<<d<<endl;
cout<<a<<' '<<d-1<<endl;
cout<<a+1<<' '<<c<<endl;
}
}
int main()
{
int t; cin>>t;
while(t--)
{
slove();
}
}
J. 数据时间?
题目
牛可乐正在分析最近几个月用户登录牛客 APP 的情况,他所收集的数据由三个字段构成,分别为:user_id 表示用户 ID,login_date表示登录日期,login_time 表示登录时间
由于牛可乐同时还在忙着演奏■■■、去牛妹家吃一勺饭、钻研可爱的字符串……所以他想请你帮助他统计 hhh 年 mmm 月份通勤、午休、临睡这三个时段各有多少人登录过 APP。特别地,同一个人在同一时段多次登录视作一次。
在本题中,通勤时间段为 07:00:00-09:00:00和 18:00:00-20:00:00;午休时间段为 11:00:00-13:00:00;临睡时间段为 22:00:00-01:00:00。时间段均包含左右边界值。
思路:模拟
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,h,m; cin>>n>>h>>m;
string s=to_string(h)+"-";
if(m>=10) s=s+to_string(m);
else s=s+"0"+to_string(m);
set<string> a,b,c;
while(n--)
{
string id,date,time;
cin>>id>>date>>time;
if(date.substr(0,7)!=s) continue;
string h=time.substr(0,2);
if(h=="07"||h=="08"||time=="09:00:00"||
h=="18"||h=="19"||time=="20:00:00") a.insert(id);
if(h=="11"||h=="12"||time=="13:00:00") b.insert(id);
if(h=="22"||h=="23"||h=="00"||time=="01:00:00") c.insert(id);
}
cout<<a.size()<<" "<<b.size()<<" "<<c.size();
}