codeforces:812(div2):总结

前言

比较水的一场比赛
E题几乎是一本通原题而我还是不会做qwq

A - Sagheer and Crossroads

有一个十字路口,给出四个路口的车是否可以左转/右转/直行,并且给出每个路口的行人是否可以通过,求是否出现车和人冲突的情况

阅读理解题(其实只是我英语太差了),读懂题意直接模拟即可

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=5e5+100;
const int mod=1e9+7;
const double eps=1e-9;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}int n,m;int a[5][5],d[4]={0,3,2,1};
bool vis[5];
int main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endiffor(int i=1;i<=4;i++){for(int j=1;j<=4;j++) a[i][j]=read();}for(int i=1;i<=4;i++){for(int j=1;j<=3;j++){if(a[i][j]){//printf("i=%d j=%d to=%d\n",i,j,(i+d[j]-1)%4+1);vis[(i+d[j]-1)%4+1]=1,vis[i]=1;}}}for(int i=1;i<=4;i++){if(vis[i]&&a[i][4]){printf("YES");return 0;}}printf("NO\n");return 0;
}

B - Sagheer, the Hausmeister

给出一个n层的房屋,每层有m个房间,最左边和最右边有两个楼梯
有一些房间的灯是开着的,求一条从第一层左楼梯开始的最短的不下楼的路径,关掉所有的灯
n≤15,m≤100n \leq 15,m \leq 100n15,m100

dp入门水题,设计 dpi,0/1dp_{i,0/1}dpi,0/1 表示从在第 i 层的左/右楼梯(本层的灯还没有关)的最短路径,枚举关灯方式进行转移即可
时间复杂度 O(n×m)O(n \times m)O(n×m)瓶颈竟然在于输入
但是这题还WA了两次…有一些特殊情况需要特判:

  1. 如果当前楼的上面一盏灯都没有就不必继续上楼了
  2. 存在整栋楼没有灯的情况
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=5e5+100;
const int mod=1e9+7;
const double eps=1e-9;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}int n,m;
int dp[18][2];
int l[18],r[18];
int main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifint top(0);n=read();m=read()+2;for(int i=n;i>=1;i--){for(int j=1;j<=m;j++){int x(0);scanf("%1d",&x);if(x){if(!top) top=i;if(!l[i]) l[i]=j;r[i]=j;}}}memset(dp,0x3f,sizeof(dp));dp[1][0]=0;n=top;if(!top){printf("0");return 0;}for(int i=1;i<n;i++){if(!l[i]){dp[i+1][0]=dp[i][0]+1;dp[i+1][1]=dp[i][1]+1;}else{dp[i+1][0]=min(dp[i][0]+2*(r[i]-1)+1,dp[i][1]+m);dp[i+1][1]=min(dp[i][1]+2*(m-l[i])+1,dp[i][0]+m);//printf("i=%d dp0=%d dp1=%d\n",i+1,dp[i+1][0],dp[i+1][1]);}}int ans=min(dp[n][0]+r[n]-1,dp[n][1]+m-l[n]);printf("%d\n",ans);return 0;
}

C - Sagheer and Nubian Market

给出 nnn 个元素的基本价格 aia_iai ,如果你选择了k个元素 ax1,ax2,...,axka_{x_1},a_{x_2},...,a_{x_k}ax1,ax2,...,axk,那么每个元素的真实价格就是 axi+k∗xia_{x_i}+k*x_iaxi+kxi(换句话说就是加上总数量乘下角标)
现在有 sss 元钱,求最多能买到几个元素

二分答案,二分后每个元素的真实价格就确定了,sort后取前 kkk 个看有没有超过 sss 即可

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=2e5+100;
const int mod=1e9+7;
const double eps=1e-9;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}int n,m,s;
ll a[N],b[N];
ll calc(int k){for(int i=1;i<=n;i++) b[i]=a[i]+1ll*i*k;sort(b+1,b+1+n);ll res(0);for(int i=1;i<=k;i++) res+=b[i];return res;
}
int main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();s=read();for(int i=1;i<=n;i++) a[i]=read();int st=0,ed=n;while(st<ed){int mid=(st+ed+1)>>1;if(calc(mid)<=s) st=mid;else ed=mid-1;}printf("%d %lld\n",st,calc(st));return 0;
}

D - Sagheer and Kindergarten

如果想自己做一下这道题,建议直接去原题面

nnn 个孩子和 mmm 个玩具,孩子会提出一共k个对玩具的要求,满足如下性质:

  1. 如果一个孩子要求的玩具是闲置的(也就是不在任何一个孩子手中),他就会得到那个玩具,否则他就会一直等待
  2. 每个孩子可能会要求得到若干个玩具,只有当其得到 所有玩具 时,才会满意,并在玩一会玩具后返还所有的玩具,而在此之前会一直霸占着所有已有的玩具
  3. 如果变得空闲的玩具被两个孩子要求,会优先满足靠前的要求
  4. 如果一个孩子的某个要求没有被满足,他就不会再要求别的玩具
  5. 如果一个孩子发现自己永远也得不到满足,就会开始哭
  6. 保证在当前的k个要求中,没有孩子在哭

有q个独立的询问,每次增加一条要求(不一定满足第4条和第6条),求有多少个孩子在哭

真正的阅读理解题(上面这一大陀已经是我部分精简抽象后的结果),难点似乎就在于转化题意,后面就比较显然了

可以把对玩具的要求转化为孩子之间的依赖关系
具体的,如果x要求玩具w,上一个要求玩具w的人是y,就连一条有向边 y−>xy->xy>x,表示只有y满足之后x才能满足
一个孩子哭泣,当且仅当他在某个环中
由于性质4和性质6,连成的图一定是一个森林
每次判断给出的新的依赖关系是否是返祖边,如果是,这条链就会形成一个环,否则必然不会成环
判断返祖不必lca,可以直接用dfs序判定子树的方法,单次询问 O(1)O(1)O(1)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=2e5+100;
const int mod=1e9+7;
const double eps=1e-9;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}int n,m,k,q;
int bel[N];
struct node{int to,nxt;
}p[N<<1];
int fi[N],cnt;
inline void addline(int x,int y){p[++cnt]=(node){y,fi[x]};fi[x]=cnt;return;
}int du[N];
int siz[N],pos[N],tim,dep[N];
void dfs(int x,int f){pos[x]=++tim;dep[x]=dep[f]+1;siz[x]=1;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;dfs(to,x);siz[x]+=siz[to];}return;
}
int main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifmemset(fi,-1,sizeof(fi));cnt=-1;n=read();m=read();k=read();q=read();for(int i=1;i<=k;i++){int x=read(),y=read();if(bel[y]) addline(bel[y],x),du[x]++;bel[y]=x;    }for(int i=1;i<=n;i++){if(!du[i]) dfs(i,0);}for(int i=1;i<=q;i++){int x=read(),y=read();int o=bel[y];if(pos[x]<=pos[o]&&pos[o]<=pos[x]+siz[x]-1) printf("%d\n",siz[x]);else printf("0\n");}return 0;
}

E - Sagheer and Apple Tree

给定一个树,第i个节点上有aia_iai个苹果
两人轮流行动,每次可以选择一个有苹果的节点,进行下列行为之一:

  1. 如果是叶子节点,就吃掉节点上的一些苹果
  2. 如果不是叶子,就把节点上的一些苹果移到他的一个儿子上

保证从根到所有叶子的距离的奇偶性相同
现在,后手方可以交换任意两个节点(u,v)(u,v)(u,v)上的苹果数,求能使双方最优情况下后手获胜的无序点对(u,v)(u,v)(u,v)的数量

ybt有一道情景几乎一模一样的题
然而还是并不会
qwq
感觉这个题的题解讲的更加透彻
把叶子和到叶子距离为偶数的点染成黑色,距离为偶数的点染成白色
那么,每次操作其实就是使黑色节点的某一堆的石子增加或减少
那么和nim游戏的唯一区别就是这里还可以增加石子
但是其实并不影响,因为必败方尝试增加石子后,必胜方都可以把增加的石子减少回去
所以后手胜的充要条件和nim一样,就是黑点权值异或和为0
然后合法点对就可以分类讨论一下然后开个map随便做了

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
const int N=2e5+100;
const int mod=1e9+7;
const double eps=1e-9;
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}int n;
struct node{int to,nxt;
}p[N<<1];
int fi[N],cnt;
inline void addline(int x,int y){p[++cnt]=(node){y,fi[x]};fi[x]=cnt;return;
}int num[2];
int a[N],op[N],s;
map<int,int>mp;
void dfs(int x){if(fi[x]==-1){op[x]=1;return;}for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;dfs(to);op[x]=op[to]^1;}  return;
}int main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifmemset(fi,-1,sizeof(fi));cnt=-1;n=read();for(int i=1;i<=n;i++) a[i]=read();for(int i=2;i<=n;i++) addline((int)read(),i);dfs(1);for(int i=1;i<=n;i++){++num[op[i]];if(op[i]) s^=a[i];}if(s==0){ll ans=1ll*num[0]*(num[0]-1)/2+1ll*num[1]*(num[1]-1)/2;for(int i=1;i<=n;i++){if(op[i]) mp[a[i]]++;}for(int i=1;i<=n;i++){if(!op[i]) ans+=mp[a[i]];}printf("%lld\n",ans);}else{ll ans(0);for(int i=1;i<=n;i++){if(op[i]) mp[a[i]^s]++;}for(int i=1;i<=n;i++){if(!op[i]) ans+=mp[a[i]];}printf("%lld\n",ans);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在ASP.NET Core程序启动时运行异步任务(2)

原文&#xff1a;Running async tasks on app startup in ASP.NET Core (Part 2)作者&#xff1a;Andrew Lock译者&#xff1a;Lamond Lu在我的上一篇博客中&#xff0c;我介绍了如何在ASP.NET Core应用程序启动时运行一些一次性异步任务。本篇博客将继续讨论上一篇的内容&…

Gym 102798A Golden Spirit

VJ链接 题意&#xff1a; 河的两岸各有n个人&#xff0c;中间有个桥&#xff0c;过桥时间为t&#xff0c;所有人过桥后要休息x时间&#xff0c;你每次可以带一个人过桥&#xff08;每次最多只能带一个人&#xff09;&#xff0c;问将所有人带到对岸并带回来&#xff0c;最短需…

P8347-「Wdoi-6」另一侧的月【博弈论,结论】

正题 题目链接:https://www.luogu.com.cn/problem/P8347 题目大意 给出一棵树&#xff0c;两个人轮流操作。 操作者可以选择一个点删除&#xff0c;然后选择一个剩下的连通块&#xff0c;删除其他连通块。 操作完成后只剩下一个点的人失败&#xff0c;求是否先手必败。 1≤…

线性代数四之动态DP(广义矩阵加速)——Can you answer these queries III,保卫王国

动态DP——广义矩阵加速SP1716 GSS3 - Can you answer these queries IIIdescriptionsolutioncode[NOIP2018 提高组] 保卫王国descriptionsolutioncode动态DP能矩阵加速要满足外层操作符对内层操作符具有分配率加法对于乘法就具有分配率(ab)*ca*cb*c SP1716 GSS3 - Can you a…

洛谷P4219 大融合(LCT、虚子树)

解析 本题需要用LCT维护子树大小 然后我就不会了 然后我就用树剖水过去了 又快又好写&#xff0c;真香 现在详细聊聊如何用LCT维护子树信息 每个结点再定义一个新的变量记录所有虚儿子的信息 然后…完了&#xff1f; 告别盲目pushup&#xff0c;我们来详细聊聊在哪里需要更新…

.Net Core跨平台应用研究-HelloArm(串口篇)

引言为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应用是否能在高性价比的linux嵌入式平台运行&#xff0c;针对dotnet core应用程序进行嵌入式linux环境的发布部署运行验证研究。硬件环境硬件系统经过对比筛选&#xff0c;选用了友善之臂出品的NanoPC-T3 Plus…

H - Message Bomb Gym - 102798H

H - Message Bomb Gym - 102798H 题意&#xff1a; 有n个团队&#xff0c;m个人&#xff0c;s个操作 操作1&#xff1a;学生x加入y团队 操作2&#xff1a;学生x推出y团队 操作3&#xff1a;学生x在团队y发送一个信号&#xff0c;在团队y内的所有成员&#xff08;除了x&#x…

Loj#3005-「JOISC 2015 Day 4」Limited Memory【交互题】

正题 题目链接:https://loj.ac/p/3005 题目大意 有一个长度为nnn的括号串SSS&#xff0c;其中包括[]和<>两种括号类型&#xff0c;一个合法的括号串要求同类型的括号一一对应。 你每次可以询问SSS中的一个字符并且传递一个[0,222)[0,2^{22})[0,222)的数字到下一次。 …

[数论系列一]C Looooops,跳跳棋,The Luckiest number,CF906D Power Tower,Minimal Power of Prime,仪仗队,LCMSUM

文章目录C Looooopsdescriptionsolutioncode跳跳棋descriptionsolutioncodeThe Luckiest numberdescriptionsolutioncodeCF906D Power TowerdescriptionsolutioncodeMinimal Power of Primedescriptionsolutioncode[SDOI2008]仪仗队descriptionsolutioncodeLCMSUMdescriptionso…

P4299 首都(LCT、重心)

解析 动态维护树的重心 关键性质&#xff1a;两棵树合并时&#xff0c;新的重心一定在两个原重心之间的路径上 把两个重心之间的路径提出来&#xff0c;利用splay本身的二叉结构二分即可 注意虚子树信息的处理 不要忘记pushdown 代码 #include<bits/stdc.h> using nam…

.NET Core使用微软AI认知服务识别文字语言

点击上方蓝字关注“汪宇杰博客”识别一段文字的语言有多种途径&#xff0c;在这个以AI为热点的时代&#xff0c;我们也可以给自己的应用强行加上AI&#xff0c;然后就能加上“智慧”的名字“自主研发成功”后去吹牛逼。今天我带大家来看看如何使用微软智慧云Azure提供的AI认知服…

2020CCPC威海

2020CCPC威海 2020CCPC威海榜单 题号题目知识点难度AGolden Spirit思维&#xff0c;推导题签到题BLabyrinthdfs思维金牌题CRencontreDABC Conjecture数论&#xff0c;推导签到题ESo Many Possibilities…FSkeleton DynamizationGCaesar Cipher线段树hash银牌题HMessage Bomb贪…

P6118-[JOI 2019 Final]珍しい都市【树的直径】

正题 题目链接:https://www.luogu.com.cn/problem/P6118 题目大意 给出一棵nnn个点的树&#xff0c;对于一个点xxx来说&#xff0c;独特的点y(y≠x)y(y\neq x)y(y​x)是指不存在zzz使得dis(y,x)dis(z,x)dis(y,x)dis(z,x)dis(y,x)dis(z,x)&#xff0c;其中x≠z,y≠zx\neq z,…

[NOI2021 day1]轻重边(树链剖分),路径交点(矩阵行列式)

NOI 2021 day1轻重边descriptionsolutioncode路径交点descriptionsolutioncode轻重边 description solution case1~6 把父亲和儿子的边转化为储存在儿子上的点 建树&#xff0c;暴力爬lcalcalca&#xff0c;暴力修改&#xff0c;O(n2)O(n^2)O(n2) caseA 对于一条链的情况&am…

模板:CDQ分治

文章目录前言upd例题P3810 【模板】三维偏序&#xff08;陌上花开&#xff09;P2487 [SDOI2011]拦截导弹所谓CDQ分治&#xff0c;就是和由Conprour、Doctorjellyfish、QE添一同发明的分治算法 &#xff08;逃&#xff09; 前言 神奇的乱搞黑科技 CDQ分治能够通过更小的时间常…

【NET CORE微服务一条龙应用】第二章 配置中心使用

背景系列目录&#xff1a;【NET CORE微服务一条龙应用】开始篇与目录在分布式或者微服务系统里&#xff0c;通过配置文件来管理配置内容&#xff0c;是一件比较令人痛苦的事情&#xff0c;再谨慎也有湿鞋的时候&#xff0c;这就是在项目架构发展的过程中&#xff0c;配置中心存…

D - ABC Conjecture Gym - 102798D

D - ABC Conjecture Gym - 102798D 题意&#xff1a; 规定rad(n)n的所有质因子的乘积 给你一个c&#xff0c;问能否构造a和b使得abc且rad(abc)<c 题解&#xff1a; 先说结论&#xff0c;如果c可以拆分出两个一样的质因子&#xff0c;则能构造a和b 即 np1a1 * p2a2 . . .…

P7560-[JOISC 2021 Day1]フードコート【吉司机线段树】

正题 题目链接:https://www.luogu.com.cn/problem/P7560 题目大意 有nnn个队列&#xff0c;要求支持操作&#xff1a; 往[L,R][L,R][L,R]的队列中插入kkk个ccc。出队[L,R][L,R][L,R]中的kkk个元素。&#xff08;如果不足kkk个就全部出队&#xff09;求第aaa个队列中的第bbb个…

“幕后英雄”之Backing Fields【Microsoft Entity Framework Core随笔】

刘德华 有一首歌叫《马桶》&#xff0c;其中有一句歌词是&#xff1a;每一个马桶都是英雄。EFCore也有一个英雄&#xff0c;在幕后默默地任劳任怨。它就叫 "支持字段" (Backing Fields):中文版&#xff1a;https://docs.microsoft.com/zh-cn/ef/core/modeling/backin…

P4169 [Violet]天使玩偶/SJY摆棋子(CDQ分治、暴力)

解析 之前用KDtree做的一道题 由于懒不想再码一遍了 考虑CDQ分治 关键就是如何拿掉绝对值 如果只维护左下角的&#xff0c;显然就是一个经典的三维偏序问题了 但是本题不一定在左下角&#xff0c;也可能在左上、右下、右上 怎么办&#xff1f; 把坐标翻转翻转直接暴力做四遍即…