题解 Emotional Flutter
因为一个等号挂掉了10pts
发现每个黑色段一定对应了一段不可行的出发区间
检查是否存在所有黑色段的并集的补集即可
具体来说,我们对于每个黑色段计算出一个(有的是两个)区间 \([l, r]\) ,把它们全合并,看有没有剩下的位置
Code:
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 500010
#define ll long long
//#define int long long
char buf[1<<21], *p1=buf, *p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf, 1, 1<<21, stdin)), p1==p2?EOF:*p1++)
inline int read() {
int ans=0, f=1; char c=getchar();
while (!isdigit(c)) {if (c=='-') f=-f; c=getchar();}
while (isdigit(c)) {ans=(ans<<3)+(ans<<1)+(c^48); c=getchar();}
return ans*f;
}
int n; ll s, k;
ll a[N];
namespace force{
bool lim[N]; ll ento;
bool check(int b) {
ll now=b;
while (now<ento) {
now+=k;
if (lim[now]) return 0;
}
return 1;
}
void solve() {
ento=0;
memset(lim, 0, sizeof(lim));
for (int i=1; i<=n; ++i) {
//cout<<"goto lim: "<<ento+1<<' '<<ento+a[i]+s<<endl;
if (i&1) for (int j=ento+1; j<ento+a[i]+s; ++j) lim[j]=1;
ento+=a[i];
}
//cout<<"lim: "; for (int i=0; i<=ento; ++i) cout<<lim[i]<<' '; cout<<endl;
//cout<<"check: "; for (int i=0; i<=k; ++i) cout<<check(-i)<<' '; cout<<endl;
for (int i=0; i<=k; ++i)
if (check(-i)) {puts("TAK"); return ;}
puts("NIE");
}
}
namespace task1{
struct range{ll l, r; inline void build(ll a, ll b) {l=a; r=b;}}ran[N];
inline bool operator < (range a, range b) {return a.l<b.l;}
void solve() {
ll now=0; int top=0;
for (int i=1; i<=n; ++i) {
if (i&1) {
if (1ll*a[i]+s>k) {puts("NIE"); return ;}
//cout<<"limit: "<<now+1<<' '<<now+a[i]+s-1<<endl;
ll t1=ceil((1.0*now+1)/(1.0*k)+1e-8);
ran[++top].build(now+1-t1*k, now+a[i]+s-1-t1*k);
if (now+a[i]+s-1-t1*k>=0) {
++t1;
ran[++top].build(now+1-t1*k, now+a[i]+s-1-t1*k);
}
}
now+=a[i];
}
sort(ran+1, ran+top+1);
//cout<<"ran: "<<endl; for (int i=1; i<=top; ++i) cout<<ran[i].l<<' '<<ran[i].r<<endl;
for (int i=2; i<=top; ++i) {
//cout<<"i: "<<i<<endl;
if (ran[i-1].r+1>=ran[i].l) ran[i].l=ran[i-1].l, ran[i].r=max(ran[i-1].r, ran[i].r);
else {puts("TAK"); return ;}
}
//assert(top==1);
//cout<<"top: "<<ran[top].l<<' '<<ran[top].r<<endl;
if ((ran[top].l>=-k&&ran[top].r<-1) || (ran[top].l>-k&&ran[top].r<0)) {puts("TAK"); return ;}
puts("NIE");
}
}
signed main()
{
int T;
T=read();
while (T--) {
s=read(); k=read(); n=read();
for (int i=1; i<=n; ++i) a[i]=read();
//force::solve();
task1::solve();
}
return 0;
}
题解 Emotional Flutter的更多相关文章
- csp-s模拟47 Emotional Flutter,Endless Fantasy题解
题面:https://www.cnblogs.com/Juve/articles/11558523.html A:Emotional Flutter 如果起点确定,那么我们后面走的点都是固定的,及mo ...
- jzoj5832. 【省选模拟8.20】Emotional Flutter
tj:我們發現,每一次走過的步長都是k,設當前走的步數是x,走到了一個白條 那麼,每一次走就是把所有黑條都向前移k位,我們可以考慮把所有黑條的左邊界不斷的向前移動k,直到下一次移動時,其左邊界小於0, ...
- [CSP-S模拟测试]:Emotional Flutter(贪心)
题目传送门(内部题51) 输入格式 第一行一个整数$t$表示数据组数.每组数据的第一行有三个整数$s,k,n$.第二行有$n$个整数$A_1,A_2,...,A_n$,依次表示黑白条的长度. 输出格式 ...
- 20210819 Emotional Flutter,Medium Counting,Huge Counting,字符消除2
考场 T1 一下想到了这题,将白块缩短 \(s\) 后维护类似的区间即可. T2 T3 俩计数,直接跳了. T4 的可行 \(t\) 集合相同相当与从 \(n\) 往前跳 kmp 数组,途径点相同,从 ...
- [CSP-S模拟测试47]反思+题解
打开题面,T3似乎被换过了.(那我就更有理由直接弃掉了) T1是我最害怕的乱搞题,赶紧扔了看T2.发现是个sb板子?雨天的尾巴弱化版? 然而线段树合并早忘干净了(最近几道可以线段树合并的题都是用别的方 ...
- 2019.9.19 csp-s模拟测试47 反思总结
思路接近正解?都想到了?这都是借口呀. 没有用的,往前走吧. T1:Emotional Flutter 我的做法和题解不太一样,我把s放在最后考虑了. 因为出发以后步幅是一样的,所以每一个黑条可以ba ...
- noip模拟44[我想我以后会碰见计数题就溜走的]
noip模拟44 solutions 这一场抱零的也忒多了,我也只有45pts 据说好像是把几套题里面最难的收拾出来让我们考得 好惨烈啊,这次的考试我只有第一题骗了40pts,其他都抱零了 T1 Em ...
- 2021.8.19考试总结[NOIP模拟44]
T1 emotional flutter 把脚长合到黑条中. 每个黑条可以映射到统一区间,实际操作就是左右端点取模.长度大于$k$时显然不合法. 然后检查一遍区间内有没有不被黑条覆盖的点即可. 区间端 ...
- CSPS模拟 47
考试时T1没玩明白,用一个WA90把100盖住了? T1 Emotional Flutter 题目非常蠢萌,只是注意当你把黑块前伸s距离后,应把脚的长度视为0,而不应为1. T2 Endless Fa ...
随机推荐
- STM32笔记四
1.时钟振荡器:产生时钟信号送给单片机内部各电路,并且控制这些电路,使它们有节拍的工作. 2.ROM是一种具有存储功能的电路,断电后信息不回丢失.RAM也是一种存储电路,断电后信息丢失. 3.串行通信 ...
- Django基础013--redis开发
1.redis配置 在settings.py中加入以下代码块,可支持多个redis的配置 1 CACHES = { 2 "default": { 3 "BACKEND&q ...
- [008] - JavaSE面试题(八):集合
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [008] - JavaSE面试题(八):集合 第1问:说一下集合的体系? 单列集合: 双列集合: ...
- 算法leetcode_分治算法
一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子 ...
- python包安装
python包安装: 一种是有网操作:pip install 包名:例子[pip install setuptools] 无网络服务器上操作: 先把包下载:传上去再安装[] 1.一种是 *.wh ...
- Clip Studio Paint EX 1.10.6安装破解教程
clip studio paint是一款牛逼的绘图软件,简称csp.做动漫.漫画设计的同学的必备神器.本文教大家如何安装并破解 clip studio paint ex 1.10.6版本,文章教程提供 ...
- AAAI 2021 最佳论文公布
作者:Synced 翻译:仿佛若有光 第三十五届 AAAI 人工智能会议 (AAAI-21) 以虚拟会议的形式拉开帷幕.组委会在开幕式上公布了最佳论文奖和亚军.三篇论文获得了最佳论文奖,三篇被评为 ...
- 不想用Spring全家桶?试试这个国产JFinal框架
前言 逃离北上广从广州回老家南宁,入职这家公司用的技术是JFinal,借此机会得以学习这个国产的MVC框架,经过一段时间的学习,基于之前的经验搭建一个通用项目jfinal-demo jfinal-de ...
- 在vue中使用微信jssdk的getLocalImgData怎么让多张图片显示
在循环里添加了一个异步请求类型的,所以我让他每次执行完毕后再执行下一次操作,其中用到了async 和 await,将异步变为同步去执行. 1 // 图片上传 2 handleImage(typeVal ...
- pwnable.kr之unlink
pwnable.kr之unlink 之前在看别的东西,学习的随笔也没有写完......颓了几天. 由于最近在看堆,就把pwnable.kr上unlink这道题做一下,学习一下. 1.程序分析 #inc ...