首页 > 其他分享 >牛客小白月赛97 A-D题解

牛客小白月赛97 A-D题解

时间:2024-07-04 11:42:44浏览次数:14  
标签:20 int 题解 ll 牛客 序列 include 97

AAAAAAAAAAAAAAAAAAAAA

-----------------------------题解-------------------------------------------
统计数组中有没有出现三个相同的边即可

点击查看代码
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin>>n;
    map<int,int>m;
    int jud=0;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        m[x]++;
        if(m[x]>=3) jud=1;
    }
    if(jud==1) cout<<"YES"<<endl;
    else cout<<"NO";
        
}

B.好数组

------------------------题解---------------------------------
开始想用O1并且特判所有特殊情况,后来发现不行。便开始认真读题,我们可以忽略正负发现一个普遍的规律,还记得基本不的等吗,两个数字相差越小,他们的乘积就越大,那我们只要知道这一个数组最小的乘积看他是否大于他俩的差的绝对值就好了

于是我们sort 一下比较 a[1]和a[n]的差与他俩的乘积就行了

点击查看代码
#include<bits/stdc++.h>
using namespace std;

const int N=2e5+10;
typedef long long ll;
ll a[N];
int main()
{
    ll n;
    cin>>n;
    ll jud=0;
    ll c1=0,c2=0;
    map<ll,ll>m;
    for(ll i=1;i<=n;i++)
    {   cin>>a[i];
        m[a[i]]++;
    }
    sort(a+1,a+1+n);
    if(abs(a[n]-a[1])<a[1]*a[n]) jud=0;
    else jud=1;
    if(jud==1) cout<<"NO"<<endl;
    else cout<<"YES"<<endl;
}

C 前缀平方和序列

-----------------------------题解----------------------------------
首先要读懂题意,他问的是前缀平方和的序列有多少,而不是能组成这个前缀平方和的数组有多少个(这样的话会是无限个)

读懂之后就很简单了,我们只需要知道x开平方后是多少就可以知道 这个序列最大的长度是多少 比如样例中sqrt(26)=5 那么这个序列最长可以有5个

然后n便是子序列的长度,因此我们可以翻译为 找长度为sqrt(x)的序列的 长度为n的子序列有多少个,直接套用求组和数的板子便可以无脑做出

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
typedef long long ll;
const int mod=1e9+7;
ll c[2010][2010];
void init()
{
    for(int i=0;i<2010;i++)
    {
        for(int j=0;j<=i;j++)
        {
            if(j==0) c[i][j]=1;
            else c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
        }
    }
}
ll a[N];
int main()
{   init();
    map<ll,ll>m;
   
 ll n,x;
 cin>>n>>x;
 ll x1=sqrt(x);
 cout<<c[x1][n];
 
    
}

D 走一个大整数迷宫


能看到这里的都是糕手了,我简化语言

-------------------------------------题解-----------------------------------

这题看着很复杂,其实是唬人的,我们仔细阅读那个公式之后就会发现他的后半部分p的二次方什么b[i][j]完全没用,因为你不管是P的多少次方对p-1取模 永远不会等于0

因此这题只与a[i][j]有关

然后就是考验码力的bfs 把所有对a[i][j]取模之后所获得的数字都表达出来,因此开了一个三维数组 ,记录所有路径取模之后的数字。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int a[20][20];
int b[20][20];
int f[20][20][10010];
bool vis[20][20][10010];
int n,m;
struct node
{
    int x,y,sum;
};
int dx[4]={1,0,-1,0};
int dy[4]={0,-1,0,1};
int main()
{  int n,m,p;
 cin>>n>>m>>p;
 for(int i=1;i<=n;i++)
 {
    for(int j=1;j<=m;j++) cin>>a[i][j];
 }
  for(int i=1;i<=n;i++)
 {
    for(int j=1;j<=m;j++) cin>>b[i][j];
 }
 p=p-1;
 vis[1][1][a[1][1]%p]=true;
 f[1][1][a[1][1]%p]=0;
    queue<node> q;
 q.push({1,1,a[1][1]%p});
 while(q.size())
 {
     auto u=q.front();
     q.pop();
     for(int i=0;i<4;i++)
     {
        int tx=u.x+dx[i],ty=u.y+dy[i];
         int sum1=(u.sum+a[tx][ty])%p;
         if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&vis[tx][ty][sum1]==false)
         {
             vis[tx][ty][sum1]=true;
            f[tx][ty][sum1]=1+f[u.x][u.y][u.sum];
             q.push({tx,ty,sum1});
           //  cout<<tx<<" "<<ty<<endl;
         }
     }
     
     
 }
 if(vis[n][m][0]==0) cout<<"-1";
 else cout<<f[n][m][0];
    
}

标签:20,int,题解,ll,牛客,序列,include,97
From: https://www.cnblogs.com/qau-marisa3/p/18283349

相关文章

  • P2286 [HNOI2004] 宠物收养场 题解
    P2286[HNOI2004]宠物收养场set做法题链\(_{洛谷}\)\(_{题库}\)思路一眼查找前驱后继的题。注意到一句话:那么用set就没有什么阻碍了,方便又快捷。题意很简单,若宠物多则查找与人需求最接近的上下两个值,人多则找与宠物最接近的上下两个人的值。出题人很善良,把选人和选宠物......
  • 刺杀 题解
    题目简述你在玩一个游戏,需要刺杀\(n\)个敌人。可以肉搏或者用子弹击杀敌人。肉搏第\(i\)个敌人会使你的体力值减少\(x_i\),你要保证你的体力值始终非负。击杀第\(i\)个敌人后,会获得\(y_i\)颗子弹,有可能\(y_i\)为\(0\),这时候你啥都拿不到。你初始体力值为\(s\),有一个......
  • P10589 题解
    经典题。tag:数状数组。开一个权值树状数组,从左往右遍历,统计左边比\(y_i\)小的数字个数\(ul_i\)与比\(a_i\)大的数字个数\(dl_i\);然后从右往左遍历,统计右边比\(y_i\)小的数字个数\(dr_i\)与比\(a_i\)大的数字个数\(ur_i\)。两个答案即为\(\sum_{i=1}^ndl_i\cdo......
  • CSP-S 2005 T1 谁拿了最多奖学金【题解】
    1.题目描述某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:院士奖学金,每人 8000 元,期末平均成绩高于 80 分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;五四奖学金,每人 4000 元,期末平均成绩高于 85 分(>85),并且班级......
  • 历年CSP-J初赛真题解析 | 2018年CSP-J初赛选择题(1-15)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客第1题以下哪一种设备属于输出设备()A.扫描仪B.键盘C.鼠标D.打印机【答案】:D【解析】A、B、C都是输入设备第2题下列......
  • 【基础知识】497- 一文读懂Base64编码
    看到一篇特别好的文章:https://cloud.tencent.com/developer/article/1584718,感谢大佬分享。  一、为什么要使用base64我们知道一个字节可表示的范围是0~255(十六进制:0x00~0xFF),其中ASCII值的范围为0~127(十六进制:0x00~0x7F);而超过ASCII范围的128~255(十六进制:0x80~0......
  • P7690 [CEOI2002] A decorative fence 题解
    题目传送门前置知识计数DP解法方案数统计同luoguP2467[SDOI2010]地精部落,但部分写得不太好看的状态转移方程在本题中并不适用,但仍可借鉴其“离散化”思想。考虑试填。设\(f_{i,j,0/1}\)表示用\(i\)块不同的木板构成栅栏,其中最左边的木板的长度从小到大排在第\(j\)......
  • [JLU] 数据结构与算法上机题解思路分享-课程设计第一次与第二次上机
    前言首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。这里只是思路解析的博客,代码仓库在JLU_Data_Structures_Record希望你能在这里找到你想要的:)第一次上机A网络布线分数50作者朱允刚单位吉林大学2024年亚洲杯足球赛刚刚落下帷幕,......
  • 考试题解
    20240703DSroundT1考虑区间子区间问题直接扫描线加历史版本和,考虑修改。现在扫到\(r\),线段树每个位置\(i\)维护的是\(i\)到\(r\)的区间\(lca\),这些\(lca\)的深度具有单调性,考虑直接二分一下位置,然后\(r\)扫到\(r+1\)时,深度大于\(lca(r,r+1)\)的\(......
  • AT_dp_y Grid 2 题解
    题目传送门前置知识计数DP|排列组合解法正难则反,考虑求出总方案数和至少经过一个黑色格子的方案数,二者作差即为所求。强制增加一个黑色格子\((h,w)\),使得存在一条至少经过一个黑色格子的路径。如果没有“不能移动到黑色格子中”的限制,那么就是一个简单的格路计数问题,方......