首页 > 其他分享 >春季月考 #2

春季月考 #2

时间:2024-04-13 19:11:06浏览次数:12  
标签:200005 int texttt tot 春季 505 dis

做题顺序:\(\texttt{B} \to \texttt{A} \to \texttt{C} \to \texttt{D} \to \texttt{E}\)

A. 牛奶

首先可以发现,除了全部都是 \(\texttt{L/R}\) 的情况,其他的情况一定可以把数组分割成几段全部都是 \(\texttt{L,R}\) 的段。像是这样:\(\texttt{RRRLLRLLL}\)

  • 如果当前段是 \(\texttt{R}\) 段,那么所有的牛奶都会向着最后一个 \(\texttt{R}\) 的右边推进,像这样:\(\texttt{3210} \to \texttt{2211} \to \texttt{1212} \to \texttt{0213} \to \texttt{0114} \to \cdots\)。
  • 左边必然是一个 \(\texttt{L}\) 段,于是会出现这样子的情况,\(\texttt{L/R}\) 交界处两只满了的牛互相给对方奶,后面推上来的奶全部作废:\(\texttt{32112} \to \texttt{22111} \to \texttt{12110} \to \texttt{02110} \to \texttt{01110} \to \texttt{00110} \to \texttt{00110} \to \cdots\)
  • 所以,对于每一个 \(\texttt{RRR} \cdots \texttt{RRLL} \cdots \texttt{LL}\) 的这种段
    • 从 \(\texttt{R}\) 串的开头开始浪费牛奶,到达倒数第二只牛之后,就没法浪费了。
    • 从 \(\texttt{L}\) 串的末尾开始浪费牛奶,到达倒数第二只牛之后,就没法浪费了。
  • 但是这样子不太好找,所以我们搞一个环形的链表,直接找 \(\texttt{LR}\),相当于找到了两组 \(\texttt{RL}\) 的其中一个开头,然后从中间开始向两边浪费。

评价:奇奇妙妙。

#include <bits/stdc++.h>
#define int long long
using namespace std;

int Prev[200005],Next[200005];
int N,M,a[200005],ans;
char s[200005];
bool ISL,ISR;

void Make_Dlist(int N){
    for(int i=1;i<=N;i++){
        Prev[i]=i-1,Next[i]=i+1;
    }Prev[1]=N,Next[N]=1;
}

signed main()
{
    ISL=ISR=false;
    scanf("%lld%lld",&N,&M);
    scanf("%s",s+1);
    for(int i=1;i<=N;i++){
        scanf("%lld",&a[i]);ans+=a[i];
        if(s[i]=='L') ISL=true;
        if(s[i]=='R') ISR=true;
    }
    if(!ISL or !ISR){
        printf("%lld",ans);
    }else{
        Make_Dlist(N);
        for(int i=1;i<=N;i++){
            int l=i,r=Next[i];
            if(s[l]=='L' and s[r]=='R'){
                int waste=0;
                while(s[Prev[l]]!='R'){
                    if(waste+a[l]<M) waste+=a[l];
                    else             {waste=M;break;}
                    l=Prev[l];
                }ans-=waste;

                waste=0;
                while(s[Next[r]]!='L'){
                    if(waste+a[r]<M) waste+=a[r];
                    else             {waste=M;break;}
                    r=Next[r];
                }ans-=waste;
            }
        }
        printf("%lld",ans);
    }
    return 0;
}

B. 起床

通过每一个农场的最短到达时间和关闭时间,可以计算出至少要在哪个时刻之前起床,才能访问到这个农场。树状数组搞一搞就好了。

#include <bits/stdc++.h>
using namespace std;

int N,c[200005],t[200005];
int s[200005],tot;
int Q,V,S;

struct Tree_array{
    int Tree[1000005];
    int lowbit(int x){return x&-x;}
    void Modify(int pos,int k){
        while(pos<=1e6){
            Tree[pos]+=k;
            pos+=lowbit(pos);
        }
    }
    int Query(int r){
        int res=0;
        while(r){
            res+=Tree[r];
            r-=lowbit(r);
        }return res;
    }
}Farm;

int main()
{
    scanf("%d%d",&N,&Q);
    for(int i=1;i<=N;i++) scanf("%d",&c[i]);
    for(int i=1;i<=N;i++) scanf("%d",&t[i]);
    for(int i=1;i<=N;i++) s[i]=c[i]-t[i]-1;
    for(int i=1;i<=N;i++) if(s[i]>0) Farm.Modify(s[i],1),tot++;
    for(int i=1;i<=Q;i++){
        scanf("%d%d",&V,&S);
        if(tot-Farm.Query(S-1)<V) puts("NO");
        else                      puts("YES");
    }
    return 0;
}

C. 游戏

我们不妨来先搞一个事情,求出每一回合游戏中,Elsie 最好情况下会损失多少。

然后题目中有一句话:Even 的字典序小于 Odd

所以说我们要尽可能的选择出偶数。

那就每一次假设当前位置出偶数,看一下够不够输,不够就出单数。

挺好的题。

#include <bits/stdc++.h>
using namespace std;
const int inf=0x7fffffff;

int F[300005][2],Min[300005];
int N,M,K,a[300005][5];

void Init(){
	for(int i=1;i<=M+1;i++){
		F[i][0]=F[i][1]=inf;
		Min[i]=0;
	}
	for(int i=1;i<=M;i++){
		for(int j=1;j<=K;j++){
			int flag=a[i][j]%2;
			F[i][flag]=min(F[i][flag],a[i][j]);
			F[i][flag^1]=min(F[i][flag^1],-a[i][j]);
		}
	}
	for(int i=M;i>=1;i--){
        Min[i]=min(0,max(F[i][0],F[i][1])+Min[i+1]);
    }
}

void Main()
{
	scanf("%d%d%d",&N,&M,&K);
	for(int i=1;i<=M;i++){
		for(int j=1;j<=K;j++){
			scanf("%d",&a[i][j]);
		}
	}
    Init();
	if(N+Min[1]<=0){
		puts("-1");
	}else{
        int Have=N;
        for(int i=1;i<=M;i++){
            if(Have+F[i][0]+Min[i+1]<=0) printf("Odd "),Have+=F[i][1];
            else                         printf("Even "),Have+=F[i][0];
        }puts("");
    }
	return; 
}

int T;
int main()
{
	scanf("%d",&T);
	while(T--){
        Main();
    }
	return 0;
}

D. 充电

暴力。

#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;

int Head[505],Next[2005],tot;
int Val[2005],Go[2005];
void Add_edge(int u,int v,int w){
	tot++,Next[tot]=Head[u],Head[u]=tot,Go[tot]=v,Val[tot]=w;
}

priority_queue<pii,vector<pii>,greater<pii> >q;
bool vis[505][505];
int dis[505][505];
void Dijkstra(int s){
	memset(dis[s],0x3f,sizeof(dis[s]));dis[s][s]=0;
	memset(vis[s],false,sizeof(vis[s]));
	q.push({0,s});
	while(!q.empty()){
		int u=q.top().second;q.pop();
		if(vis[s][u])continue;vis[s][u]=true;
		for(int i=Head[u];i;i=Next[i]){
			int v=Go[i];
			if(dis[s][v]>dis[s][u]+Val[i]){
				dis[s][v]=dis[s][u]+Val[i];
				q.push({dis[s][v],v});
			}
		}
	}
}

int N,M,C,R,K,ans[505],totans;
int u,v,w;

int main()
{
    scanf("%d%d%d%d%d",&N,&M,&C,&R,&K);
    for(int i=1;i<=M;i++){
        scanf("%d%d%d",&u,&v,&w);
        Add_edge(u,v,w);
        Add_edge(v,u,w);
    }
    for(int i=1;i<=C;i++){
        Dijkstra(i);
    }
    for(int v=C+1;v<=N;v++){
        int cnt=0;
        for(int u=1;u<=C;u++){
            if(dis[u][v]<=R) cnt++;
        }if(cnt>=K) ans[++totans]=v;
    }
    printf("%d\n",totans);
    for(int i=1;i<=totans;i++){
        printf("%d\n",ans[i]);
    }
    return 0;
}

E. Data Structure Problem

样例。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    puts("20190813");
    puts("2668638611");
    puts("549902096");
    return 0;
}

标签:200005,int,texttt,tot,春季,505,dis
From: https://www.cnblogs.com/Sundar-2022/p/18133229

相关文章

  • 北京大学2024春季高等数学A(II)试题及简评
    总的来说,难度适中,可能第一题会卡一下,是一个极坐标的反向换元,如果想不到硬做还是挺难的,非常遗憾,博主没有瞪眼法瞪出来,最后才想出来但是已经来不及了TAT。另外二、六题都是挖洞法,分别是Stokes和Green的挖洞法,只要细心发现被积函数和积分区域的奇点就可以。第三题的不能使用Gauss......
  • 倒计时1天 | 袋鼠云春季发布会完整议程出炉!快快预约直播
    在日新月异的数字化经济时代,企业和组织不断寻求利用先进技术构建自身的核心竞争力。其中,大数据与AI的深度融合正在成为推动企业实现新质生产力的关键路径。在此背景下,袋鼠云举办春季发布会,以“Data+AI,构建新质生产力”为主题,旨在深度探讨如何将数据与AI紧密结合,以期打破传统的生......
  • 关于华为即将举行的鸿蒙春季沟通会的新闻报道
    华为计划在4月11日举办此次活动,届时将推出与车和PC类相关的新产品。尽管备受期待的华为P70系列设备的发布尚未得到官方确认,但已有多家媒体对此进行了报道。文章中还提到了智界S7的新款可能在4月11日上市,并进行多项新功能升级。智界S7是去年上市的一款车型,搭载了HarmonyOS4智......
  • 2024年春季学期《算法分析与设计》练习5
    问题A:随机数题目描述有一个rand(n)的函数,它的作用是产生一个在[0,n)的随机整数。现在有另外一个函数,它的代码如下:intrandom(intn,intm){        returnrand(n)+m;}显而易见的是函数random(n,m)可以产生任意范围的随机数。现在问题来了,如果我想要......
  • Polar【2024春季个人挑战赛】—— Crypto
    离家出走的猫猫题目:小明的猫咪离家出走了,在离开前小猫留下一段话:~呜喵呜呜~呜喵啊喵啊啊呜喵呜呜啊呜啊~呜呜~喵呜~~喵呜~啊呜啊呜喵呜呜喵~喵~~喵啊喵呜喵呜啊呜啊~呜啊~啊喵~~啊~~喵~啊啊~呜啊啊喵喵啊啊~啊啊啊~呜啊呜呜~呜啊啊~啊喵~呜喵~啊~喵啊呜呜喵~~喵啊~啊~呜~~喵~~......
  • 石家庄铁道大学2024年春季 2020 级课堂测试试卷—数据分析练习
    石家庄铁道大学2024年春季  2020级课堂测试试卷—数据分析练习课程名称: 大数据库技术与应用  任课教师:王建民  考试时间: 实现为止 分钟  一、 原始数据: 二、 地域维度标准化:地域属性在科技成果分析中作为一个重要维度,其标准取值非常必要,目前我国采用的标......
  • 日记 2024.3.15:2024 年 syzx 春季训练 1
    日记2024.3.15:2024年syzx春季训练1A找出在\(1,2\)周围一圈的点,挑出最远点\(u,v\)(找不到说明\(d_{1,2}=1\)),判一下\(d_{u,v}\)与\(d_{u,2}\)的关系以区分\(\pm1\)。这样比较好看。B普通冒泡\(n(n-1)/2\)次,这题\(n^2\),说明每做一次操作可以浪费一次操作。......
  • 三月八号 春季软件工程开课博客
     本学期预计达到的目标就是能够熟练的在规定时间内开发一个web应用和Android应用并且两类应用可以做到简单的互动操作。本学期也会努力的向这个目标靠近。本篇博客主要是对自己进行基本的了解、回顾,并初步确定本学期要达到的目标。我目前就读于石家庄铁道大学软件工程专业,是一......
  • 春季测试游记
    Day0下午准时到考场试机,结果刚到就被百日誓师给震撼了。试机时发现电脑是32位机且不能运行程序,结果重启了就变成了64位机。打了tarjan、平衡树等板子后就跑路了,晚上在粥馆玩了谁是卧底,@lazytag被疯狂针对。跟着chery去彩票店攒rp,然后就回酒店玩了一局桌游,7个人抽......
  • 东北师范大学 计算机学院(研究生)课程表 2010学年春季学期
    东北师范大学 计算机学院(研究生)课程表2010学年春季学期班次       项目 星   节   期    次   2009年级       计算机软件与理论 专业  课            程学分教  师课程类别教室地点星期一......