首页 > 其他分享 >牛客小白月赛101 A~E

牛客小白月赛101 A~E

时间:2024-10-08 23:44:44浏览次数:8  
标签:const int nullptr cin 牛客 fc 小白月赛 101 tb

牛客小白月赛101 A~E

A-tb的区间问题

题意:tb 给了 fc 一个长度为 n 的数组 A, fc 对 A 进行 k 次如下操作:

删除数组第一个元素或者删除数组最后一个元素。

求最后得到的数组和的最大值。

思路:最后删除的是某一组前后缀,一一去枚举可行的区间即可。

// AC one more times
// nndbk
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 2e5 + 10;

ll a[N],s[N];

int main()
{
    ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
    int n,k; cin>>n>>k;
    for(int i = 1;i <= n; i++)
        cin>>a[i];
    for(int i = 1;i <= n; i++)
        s[i] = s[i-1] + a[i];
    int len = n-k;
    ll ans = 0;
    for(int i = 1;i <= n; i++)
    {
        if(i-len+1 >= 1){
            ans = max(ans,s[i]-s[i-len]);
        }
    }
    cout<<ans<<"\n";
    return 0;
}

B-tb的字符串问题

题意:tb 给了 fc 一个字符串。

fc 对字符串可以进行若干次 (可能是0) 次如下操作:

选择子串 ''fc'' 或者子串 ''tb'' ,将其从字符串中删去。

求最后剩下字符串的最短长度。

子串:原字符串中下标连续的一段字符串。

思路:能删我们肯定删呀,而且"fc"和"tb"也没有共同字母也没有干扰。我们可以用栈去维护,类似括号匹配那种。

// AC one more times
// nndbk
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 2e5 + 10;

int main()
{
    ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
    int n; cin>>n;
    string s; cin>>s;
    s = "?" + s;
    stack<char>st;
    for(int i = 1;i <= n; i++)
    {
        
        if(st.size() > 0){
            char x = st.top();
            char now = s[i];

            if((x=='f'&&now=='c')||(x=='t'&&now=='b'))
                st.pop();
            else st.push(now);
        }else st.push(s[i]);      
    }

    cout<<st.size()<<"\n";



    return 0;
}

/*
12
tfffffcccccb
*/

C-tb的路径问题

题意:tb 给了 fc 一张有 \(n \times n\)个格点的图。 图上每个格点都写着一个数。第 \(i\) 行第\(j\)列的格点上写着的数字为 \(i\) 和 \(j\)的最大公约数。 现在 fc 需要从第 1行第 1 列出发,去往第 n 行第 n 列处的格点,fc 可以消耗一点能量移向相邻的格点。 在任何时,设 fc 所位于的格点上所写的数字为 x ,如果 x 不为 1 ,他可以使用传送阵传送到任何数字为 x 的格点,此操作不消耗能量。求 fc 到达第 n行第 n列所消耗的最少能量。

相邻:如果用 (x,y) 表示第 x行第 y 列的位置,(x,y) 与 (x+1,y),(x,y+1),(x−1,y),(x,y−1)(x+1,y) 相邻。

思路:我们发现对角线的数字都是每个数字第一次出现的位置,就算要瞬移也要先到这里。那么我们考虑枚举先到哪个数字,然后瞬移到距离(n,n)最近的地方,再一步步走即可。

// AC one more times
// nndbk
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 2e5 + 10;

int main()
{
    ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
    int n; cin>>n;
    ll ans = (n-1)*2;
    for(int i = 2;i <= n; i++)
    {
        int x = i,y = i;
        x = n/i*i;
        y = (x-1)/i*i;

        ll t = (i-1)*2;
        if(y > 0)
            t += (n-x)+(n-y);
        else t += (n-i)*2;

        ans = min(ans,t);

        // cout<<"x = "<<x<<" y = "<<y<<" t = "<<t<<"\n";
    }

    cout<<ans<<"\n";


    return 0;
}

D-tb的平方问题

题意:tb 给了 fc 一个数组 A 。
随后, tb 对 fc 进行了 q 次询问,每次询问 tb 给 fc 一个 x,需要 fc 给出包含了 x 位置且区间和为完全平方数的连续子数组个数。
完全平方数:存在正整数 t ,满足\(t \times t = x\) ,则称 x 为完全平方数
连续子数组:原数组中某段下标连续的元素按原顺序构成的数组。

思路:可以先求个前缀和,然后枚举区间,如果是完全平方数那么这段区间的贡献加1。对于区间加很容易想到差分。

// AC one more times
// nndbk
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 3100;

int s[N],d[N],a[N];

int main()
{
    ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
    
    int n,q; cin>>n>>q;
    for(int i = 1;i <= n; i++){
        cin>>a[i];
        s[i] = s[i-1] + a[i];
    }

    for(int i = 1;i <= n; i++)
    {
        for(int j = i;j <= n; j++)
        {
            int l = i,r = j;
            int t = s[r]-s[l-1];
            int tt = sqrt(t);
            if(tt*tt == t)
                d[l]+=1,d[r+1]-=1;
        }
    }

    for(int i = 1;i <= n;i++)
        d[i]+=d[i-1];
    while(q--)
    {
        int x; cin>>x;
        cout<<d[x]<<"\n";
    }

    return 0;
}

E-tb的数数问题(调和级数)

题意:tb 给了 fc 一个包含若干个数字的可重集合 A ,如果我们说一个数字 x 是好的当且仅当 \(\forall \ d | x\) ,有 \(d \in A\)。

现在,fc 想知道有多少个不同的正整数是好的,请你告诉他吧。

d∣x : 表示 d 为 x 的约数。

\(\forall \ d | x\) ,有 \(d \in A\) : x 的任何约数都至少在 A 中出现一次。

思路:最后的好数一定是A里面的数(因为至少包含数本身)。g[x]=1表示x存在。我们正常的求f[x]的约数有几个,h[x]是在A里面的x的约数个数。如果f[x]==h[x]则说明都在了。这里是调和级数的复杂度\(O(n\log{n})\)(类似于 Eratosthenes 筛的思路)。

int d[1000001] = {0}; // 储存因数倍数,初始全为 0
for (int i = 1; i <= n; i++) // 枚举 [1, n] 的数
{
    for (int j = i; j <= n; j += i) // 枚举 i 的倍数
    {
        d[j]++;
    }
}

代码:

// AC one more times
// nndbk
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 2e6 + 10;

ll a[N],f[N],g[N],h[N];

int main()
{
    ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
  
    int n; cin>>n;
    ll mx = 0;
    for(int i = 1;i <= n; i++)
    {
        cin>>a[i];
        mx = max(mx,a[i]);
        g[a[i]] = 1;
    }


    for(int i = 1;i <= mx; i++)
    {
        for(int j = i;j <= mx; j += i){
            f[j]++;
            h[j] += g[i];
        }
    }
    ll ans = 0;
    for(int i = 1;i <= mx; i++)
        ans += (f[i] == h[i]);

    cout<<ans<<"\n";
    return 0;
}

标签:const,int,nullptr,cin,牛客,fc,小白月赛,101,tb
From: https://www.cnblogs.com/nannandbk/p/18453283

相关文章

  • 牛客网1000 大厂Java 面试题大全(2024 最新版)
    很多Java工程师的技术不错,但是一面试就头疼,10次面试9次都是被刷,过的那次还是去了家不知名的小公司。问题就在于:面试有技巧,而你不会把自己的能力表达给面试官。应届生:你该如何准备简历,面试项目和面试说辞?Spring底层逻辑是什么?1-3年经验的程序员:面试中你该讲哪些值钱......
  • 10.7 noip多校联考与牛客CSP-S总结
    我在这里对我今天在牛客考试中进入洛谷做出深刻的反省,我不应该在考试的时候上与考试无关的网站(洛谷),保证没有下犯,在该做什么的时候就做什么,分清主次。10.7noip多校联考与牛客CSP-S总结noip联考T1是一道类似于概率计数DP的题,统计概率。通过题目给出的信息,可以发现使用概率,而统......
  • 10.5牛客CSP-S考试总结
    10.5牛客CSP-S考试总结为什么牛客不允许我:main(){}T1看到题目感觉是道规律题,就把题目给的式子写出来,跑了几十组随机数据,发现好像是恒等式,于是直接大胆猜测任选三个数都可以满足等式。T2题面数学公式有点诈骗,求自然常数的多个自然对数相加的和的次方,形式化的求\(e^{\ln\......
  • 2024牛客多校第二场 - I. Red Playing Cards
    思路与官方题解一样,不过我采用了递归的写法,这样就可以避免排序等操作。另外还要注意递归的时候不能让多个不同的递归函数同时修改一个数组,否则这个数组同时被多个函数使用,会很混乱。我这里把它开成了二维来避免这个问题。代码如下:#include<cstdio>#include<algorithm>usingn......
  • STM32F1系列 HAL&LL中文注释库 适用于STM32F101 103 105等MCU 1.8.5版本
    *******下有更多展示图片********由于本汉化不改变官方文件的内容与结构,文档内的链接和官方的营销信息,很多的资源站对内容有检测无法上传,同时考虑这云盘、那博客的限速、会员、账号要求。此文档挂于淘宝,价格:19.9元(GPT回血)说明:机器人自动发货,蓝奏云不限速下载,保证图文......
  • 2024牛客多校第二场 - C. Red Walking on Grid
    题目大意:\(2\timesn\)大小的方格矩阵,某些格子不能走,走过的格子不能走。从任意点出发,一次最多走多少次?首先有一个贪心的思想,每次从最左走到最右,只能向上下右走,不能向左走(因为向左走一定不会让步数更多)。动态规划,设\(f_{i,j}\)表示从每个连通块走到\((i,j)\)的最大格子数......
  • 2024牛客多校第一场 - Mirror Maze
    题目大意:一个由四种镜面(|-/\)组成的矩阵,根据镜面的方向反射光线。问坐标\((x,y)\)处向某方向射入一束光线后(此光线会直接穿过此位置\((x,y)\)的镜面),一共会反射(直接穿过的不算)到多少个不同(一个坐标算一个镜面)的镜面。总体思路为预处理出每一个坐标向每一个位置发射光线的答......
  • Leetcode 1011. 在 D 天内送达包裹的能力
    1.题目基本信息1.1.题目描述传送带上的包裹必须在days天内从一个港口运送到另一个港口。传送带上的第i个包裹的重量为weights[i]。每一天,我们都会按给出重量(weights)的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在days天内将传送带上的所......
  • 【牛客训练记录】2024牛客国庆集训派对day3
    赛后反思还是只开出来一题TATH题构造一个01矩阵,想要横竖斜三个数都不同,好像方法有很多,我们考虑交错着放010101011010101001010101上面这种长度为\(1\)的01显然不行,因为斜着也算,所以我们考虑构造长度为\(2\)的01,例如00111100这样001100111100110000110011110......
  • Debuggers 1012:Introductory GDB
    OpenSecurityTraining2LearningPaths:VulnerabilityHunting&Exploitationpython:https://www.learnpython.org/路径图:https://ost2.fyi/OST2_LP_Vulns_Exploits.pdfDebuggers1012:IntroductoryGDB(与python)-->Architecture1001:x86-64Assembly-->R......