2024牛客寒假算法基础集训营1题解(A、L、M)

【链接】:https://www.nowcoder.com/link/winter242

比赛时间:2024-02-02    13:00-18:00

赛制:ACM

前提:这三道是本小白比赛期间打出的,顺带复个盘,剩下的就是补题了o(╥﹏╥)o

2024牛客寒假算法基础集训营1题解(A、L、M)_第1张图片

目录

A.DFS搜索

L.要有光

M.牛客老粉才知道的秘密

A.DFS搜索

思路:字符串,for循环,查找,判断是否存在
子序列的定义:从原字符串中选择一些字符,将这些字符按照其在原串中的顺序拼接起来,得到的就是原字符串的一个子序列。例如:ABCDA的子序列可以为ACA、ABCDA、BA等等,但不能为ABE、CBA、AAD。

#include 

using namespace std;
bool DFS(string s){
    int len=s.size();
    int ans=0;
    for(int i=0;i>t;
    for(int i=0;i>n;
        string s;cin>>s;
        int a=0,b=0;
        if(DFS(s))a=1;
        if(dfs(s))b=1;
        cout<

 复盘:代码感觉太过于乱,且代码量太大,不够精简

看完题解后,才发现数据给的那么小,就是为了让我比赛期间打的那个i,j,k这种时间复杂度为O(n^3)好过。。。。。

重新写了个代码,AC,这个的话时间复杂度为O(n)

#include 

using namespace std;
string s1="DFS",s2="dfs";
int main() {
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        int n;cin>>n;
        string s;cin>>s;
        int a=0,b=0;
        int temp1=0,temp2=0;
        for(int i=0;i

DFS搜索:深度优先搜索

牛客题解给的解法有两种:

1. 设置变量p表示DFS目前已经匹配到了第几个字母,遇到下一个字母就让p++,检查p是不是3

2.枚举三个位置i,j,k,判断s[i],s[j],s[k],是否分别对应DFS

L.要有光

思路:手推,画图

#include 

using namespace std;

int main() {
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--){
        int c,d,h,w;cin>>c>>d>>h>>w;
        double ans=0;
        ans=3*w*c;
        cout<

 复盘:这个比赛期第一眼看到后,感觉这道题有点麻烦,就懒得去思考,打着打着有人跟我说了才去看,发现这道题其实是个很简单的数学问题,就是需要画一下,而且最优其实的是将光源放在地上

2024牛客寒假算法基础集训营1题解(A、L、M)_第2张图片

M.牛客老粉才知道的秘密

思路:手推,找规律,多尝试几组样例

所以在推导过程中,会发现只需要考虑两种情况就行

①n为6的倍数    ②n不为6的倍数

#include 

using namespace std;

int main() {
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    for(int i=0;i>n;
        if(n%6==0)cout<

你可能感兴趣的:(题解,c++)