【题解】ABC365(A~E)


前四题30min切,然后T5死磕70min+几发小唐错,距离比赛结束还有16s交最后一发,AC了。
A. Leap Year
题目描述
给你一个年份 \(Y\),输出该年的天数(判断闰年),\(1583\le Y\le2023\)。
思路
直接模拟即可。不能整除 \(4\) 或整除 \(4\) 且整除 \(100\) 的输出 \(365\),其余的输出 \(366\)。复杂度 \(O(1)\)。
代码
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ri register
#define inf 0x3f3f3f3f
int a;
int main()
{
scanf("%d",&a);
if(a%4!=0||(a%100==0&&a%400!=0))
{
puts("365");
}
else
{
puts("366");
}
return 0;
}
B. Second Best
题目描述
给你一个长为 \(N\) 的序列 \(A\),输出这个序列的次大值。\(2\le N\le100\),\(1\le A_i\le10^9\)。
思路
数据范围很小,显然复杂度 \(O(n\log n)\) 可解。用排序或者优先队列都可以。赛时为了方便,打的是优先队列。
代码
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ri register int
#define inf 0x3f3f3f3f
int a,b;
priority_queue<pair<int,int>>que;
int main()
{
scanf("%d",&a);
for(ri i=1;i<=a;i++)
{
scanf("%d",&b);
que.push({b,i});
}
que.pop();
printf("%d",que.top().second);
return 0;
}
C. Transportation Expenses
题目描述
有 \(N\) 个人,每个人有一个交通花费 \(A_i\),你要炫富给他们进行交通补助 \(x\),给每个人的钱为 \(min(x,A_i)\),但是你的预算是 \(M\) 元,即 \(\sum\limits_{i=1}^{N}min(x,A_i)\le M\),求最大的 \(x\)。如 \(x\) 可以无限大,输出infinite。\(1\le N\le2\times10^5\),\(1\le M\le2\times10^{14}\),\(1\le Ai\le10^9\)。
思路
首先有一个显然的结论:\(x=max_{i=1}^{N}A_i\) 时我们的花费最高。因为在这个值时所有人取到了 \(A_i\),之后 \(x\) 变大无法影响我们的花费了。所以如果 \(\sum\limits_{i=1}^{N}A_i\ge M\),我们就直接输出infinite好了。
然后再想对于其他情况,显然,随着 \(x\) 的增大,我们的花费是单调不减的,于是想到二分答案。对于一个确定的 \(x\),直接暴力求值,然后和 \(M\) 比较即可。复杂度 \(O(n\log n)\)。注意 \(M\) 很大,要开long long。
代码
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ri register long long
#define inf 0x3f3f3f3f
long long a,b,c[200002],sm,mx;
il bool check(long long x)
{
ri rn=0;
for(ri i=1;i<=a;i++)
{
rn+=min(c[i],x);
if(rn>b)
{
return false;
}
}
return true;
}
int main()
{
scanf("%lld%lld",&a,&b);
for(ri i=1;i<=a;i++)
{
scanf("%lld",&c[i]);
sm+=c[i];
mx=max(mx,c[i]);
}
if(sm<=b)
{
puts("infinite");
exit(0);
}
ri l,m=0,n=mx;
while(n-m>1)
{
l=(m+n)>>1;
if(check(l))
{
m=l;
}
else
{
n=l;
}
}
if(check(n))
{
printf("%lld",n);
}
else
{
printf("%lld",m);
}
return 0;
}
D. AtCoder Janken 3
题目描述
两人玩石头剪刀布,规定A一定不败给B,且A相邻的操作一定不相同。现在给你B的操作序列 \(S\),长为 \(N\),求 \(A\) 最多胜利多少局。对于 \(S_i\),R表示石头,P表示布,S表示剪刀。\(N\le2\times10^5\)
思路
一眼dp题。设 \(dp[i][0]\) 为第 \(i\) 出石头的最大获胜次数,\(dp[i][1]\) 为第 \(i\) 出布的最大获胜次数,\(dp[i][0]\) 为第 \(i\) 出剪刀的最大获胜次数。如果对方该局是石头,则我们必不能出剪刀,故不更新 \(dp[i][2]\)(初值是0);如果我们出石头,继承上一局出剪刀和布的状态,但是该局不胜,直接转移;如果我们出布,继承上一局出剪刀和石头的状态,该局取胜,所以还要+1。对方出剪刀、布时同理。最后在第 \(N\) 次的三个答案中去最大值即可。复杂度 \(O(n)\)。
代码
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ri register long long
#define inf 0x3f3f3f3f
int a,b[200002],dp[200002][5],ans;
char ch;
int main()
{
scanf("%d",&a);
for(ri i=1;i<=a;i++)
{
ch=getchar();
if(ch=='R')
{
b[i]=1;
continue;
}
if(ch=='P')
{
b[i]=2;
continue;
}
if(ch=='S')
{
b[i]=3;
continue;
}
i--;
}
for(ri i=1;i<=a;i++)
{
if(b[i]==1)
{
dp[i][1]=max(dp[i-1][2],dp[i-1][3]);
dp[i][2]=max(dp[i-1][1],dp[i-1][3])+1;
continue;
}
if(b[i]==2)
{
dp[i][2]=max(dp[i-1][1],dp[i-1][3]);
dp[i][3]=max(dp[i-1][1],dp[i-1][2])+1;
continue;
}
if(b[i]==3)
{
dp[i][3]=max(dp[i-1][1],dp[i-1][2]);
dp[i][1]=max(dp[i-1][2],dp[i-1][3])+1;
continue;
}
}
ans=max(dp[a][1],max(dp[a][2],dp[a][3]));
printf("%d",ans);
return 0;
}
E. Xor Sigma Problem
题目描述
给你一个长为 \(N\) 的序列 \(A\),求\(\sum\limits_{i=1}^{N-1}\sum\limits_{j=i+1}^{N}A_i\oplus A_{i+1}\oplus\cdots\oplus A_j\)。\(1\le N\le2\times10^5\),\(1\le A_i\le10^8\)
思路
首先 \(O(N^2)\) 处理前缀和,然后 \(O(1)\) 求解相信大家都会,但是肯定会TLE。想要AC,至少要压掉一位,也就是对于每一个数实现 \(O(1)\) 求贡献。发扬人类智慧考虑异或运算的实质,我们尝试把一个整数拆成二进制串,针对每一个新加进来的数,找前面每一位出现的0/1的个数。注意,这里我们找的个数是针对每个后缀的,因为只有连续的区间可以产生贡献。但是如果把它们分开存,时间上又回到了 \(O(N^2)\)。于是,设 \(num[i][j][k]\) 为找到第 \(i\) 个数第 \(j\) 为出现的 \(k\) 的个数,\(dp[i]\) 为第 \(i\) 为产生的累计贡献,\(pre[i]\) 为异或前缀和,转移时注意细节处理,注意开大数组和long long。复杂度\(O(30N)\)。
代码
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ri register long long
#define inf 0x3f3f3f3f
long long a,b[200002],pre[200002],num[200002][33][2],dp[33],ans;
int main()
{
scanf("%lld",&a);
for(ri i=0;i<=30;i++)
{
num[0][i][0]=1;
}
scanf("%lld",&b[1]);
pre[1]=b[1];
for(ri j=0;j<=30;j++)
{
ri k=(pre[1]>>j)&1;
num[1][j][k]=num[0][j][k]+1;
num[1][j][k^1]=num[0][j][k^1];
}
for(ri i=2;i<=a;i++)
{
scanf("%lld",&b[i]);
pre[i]=pre[i-1]^b[i];
for(ri j=0;j<=30;j++)
{
ri k=(pre[i]>>j)&1;
dp[j]+=num[i-2][j][k^1];
num[i][j][k]=num[i-1][j][k]+1;
num[i][j][k^1]=num[i-1][j][k^1];
}
for(ri i=0;i<=30;i++)
{
ans+=dp[i]*(1<<i);
}
printf("%lld",ans);
return 0;
}
【题解】ABC365(A~E)的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
- JSOI2016R3 瞎BB题解
题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...
随机推荐
- CNN --Inception Module
Smiling & Weeping ---- 祝你想我 在平静的湖面 不止在失控的雪山之前 说明:Inception Module 1. 卷积核超参数选择困难,自动找到卷积的最佳组合 2. 1 ...
- spring与设计模式之一工厂模式
大家都说要多阅读spring的代码,这非常在理,毕竟spring的代码是许许多多杰出工程师的结晶,是业界多年的累积. 最近也不是非常忙,所以准备记录一系列的相关代码. 工厂模式是所有人都会的模式,是最 ...
- Go1.13的坑:无法结束Goroutine
背景 本人作为一名SRE,想用Go模拟Cpu占用100% 1秒钟,但是在Go1.13上遇到了问题,1s后Goroutine不会停止. 只要用了for{},Goroutine就无法结束,即使主Gorou ...
- NXP i.MX 8M Plus工业开发板规格书(四核ARM Cortex-A53 + 单核ARM Cortex-M7,主频1.6GHz)
1 评估板简介 创龙科技TLIMX8MP-EVM是一款基于NXP i.MX 8M Plus的四核ARM Cortex-A53 + 单核ARM Cortex-M7异构多核处理器设计的高性能工业评估板 ...
- [UG 二次开发 PYTHON] 添加螺纹规格
NX 1988 系列 在添加螺纹特征时,不能自定义螺纹规格, 从网上找到的资料上讲,改一个XML文件,在文件中添加自定义的螺纹规格,从而实现需要的效果. 自己写了一个小程序,方便手动添加螺纹规格. 效 ...
- Unity中指定相机截屏,并将图片转为Base64
问题背景: 需求就是只截场景,不包含UI,并将截图保存为Base64格式给到Web展示. 方案: 指定相机截图: 1 /// <summary> 2 /// 指定相机截屏 3 /// &l ...
- 浏览器中JS的执行
JS是在浏览器中运行的,浏览器为了运行JS, 必须要编译或解释JS,因为JS是高级语言,计算机不认识,必须把它编译或解释成机器语言,其次,在运行JS的过程,浏览器还要创建堆栈,因为程序是在栈中执行,执 ...
- 解码技术债:AI代码助手与智能体的革新之道
技术债 技术债可能来源于多种原因,比如时间压力.资源限制.技术选型不当等.它可以表现为代码中的临时性修补.未能彻底解决的设计问题.缺乏文档或测试覆盖等.虽然技术债可以帮助快速推进项目进度,但长期来看, ...
- P1754
球迷购票问题 题意描述 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的钱币,另有N ...
- Docker通信全视角:原理、实践与技术洞察
本文全面深入地探讨了Docker容器通信技术,从基础概念.网络模型.核心组件到实战应用.详细介绍了不同网络模式及其实现,提供了容器通信的技术细节和实用案例,旨在为专业从业者提供深入的技术洞见和实际操作 ...