栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

第23次CSP认证(202109)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第23次CSP认证(202109)

第23次CSP认证---202109
      • 第一题 :数组推导    (贪心)
      • 第二题 :非零段划分   (差分)
      • 第三题 :脉冲神经网络(模拟)
      • 第四题 :收集卡牌

第一题 :数组推导    (贪心)

贪心循环一遍

在这里插入代码片
第二题 :非零段划分   (差分)

70分做法:
暴力,枚举 出现过的数字。

#include
#include
#define ll  long long
using namespace std;
const int maxx=500019;
vector v;
int a[maxx],b[maxx],n;
int check(int p) //判断没个p的个数
{
    int num=0;
    for(int i=1; i<=n; i++)
    {
        if(a[i]>=p&&a[i-1] 

100分做法:

什么情况下非零子段个数会增加呢?
相邻的两个数a[1],a[2]。 a[2]>a[1]时如果p>a[1]&&p<=a[1],那么a[0]会被置零。此时就成为了一个有效的非零子段。

我们可以将p>a[1]&&p<=a[1] 想像成数组上的一个区间,只要p在这个区间内,就认为可以构成一个非零字段。那么数组上若干个区间,差分,前缀和,遍历求最大值。将a[i-1]+1 位置++,a[i]+1位置–。只要p在【 a[i-1]+1 , a[i] 】范围内就是一个有效值。

#include
#include
#define ll  long long
using namespace std;
const int maxx=500019;
ll a[maxx],b[maxx],n;

int main()
{
    ll Max=-1;
    scanf("%lld",&n);
    for(int i=1; i<=n; i++)
    {
        scanf("%d",&a[i]);
        Max=max(Max,a[i]);
        if(a[i]>a[i-1])
        {
            b[a[i-1]+1]++;
            b[a[i]+1]--;
        }
    }
    ll temp=0,ans=0;
    for(int i=1; i<=Max; i++)
    {
         temp+=b[i];
         ans=max(ans,temp);
    }
    printf("%lldn",ans);
    return 0;
}

第三题 :脉冲神经网络(模拟)

超时 ,66分。
T 时刻,P脉冲。每个时刻不是都应该rand吗?T*P难道不是必须的吗?这样就1e8了。脉冲有规律?一开始传递 w 用优先队列写的,由于优先队列每次logN的时间复杂度,超时能理解。后来改成了二维数组,这样就是O(1)了。也超时,暂时想不出来了。

#include
#include
#include
#define ll long long
using namespace std;
const int maxx=2009;
static unsigned long next_r = 1;
int myrand(void)
{
    next_r=next_r*1103515245+12345;
    return((unsigned)(next_r/65536) % 32768);
}

int num[maxx];
struct sjy
{
    double v,u,pre_v,pre_u;
    double a,b,c,d;
    double Ik=0;
    int num=0;

} sj[maxx];
struct tuchu
{
    int endd,D;
    double w;
    tuchu(int ed,double ww,int DD)
    {
        endd=ed,w=ww,D=DD;
    }

};

vector v[maxx];
int  maichong_r[maxx*3];
struct node
{
    int TT;
    int end_node;
    double ww;
    node(int e,double w)
    {
      end_node=e,ww=w;
    }
    bool operator<(const node&n2)const
    {
        return n2.TTrr)
            {
                for(int k=0; k<(int)v[j].size(); k++)
                {
                    tuchu temp=v[j][k];
                    kk[temp.endd][i+temp.D]+=temp.w;
                }
            }

        }
        for(int j=0; j=30)
            {
                sj[j].num++;
                sj[j].v=sj[j].c;
                sj[j].u=sj[j].u+sj[j].d;
                for(int k=0; k<(int)v[j].size(); k++)
                {
                    tuchu temp=v[j][k];
                     kk[temp.endd][i+temp.D]+=temp.w;

                }

            }
            sj[j].pre_v=sj[j].v;
            sj[j].pre_u=sj[j].u;
            sj[j].Ik=0;
        }


    }

    double ans1=99999999,ans2=-99999999;
    int ans3=99999999,ans4=0;
    for(int i=0; i 
第四题 :收集卡牌 
在这里插入代码片
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290559.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号