[CSP-S模拟测试47]反思+题解
打开题面,T3似乎被换过了。(那我就更有理由直接弃掉了)
T1是我最害怕的乱搞题,赶紧扔了看T2。发现是个sb板子?雨天的尾巴弱化版?
然而线段树合并早忘干净了(最近几道可以线段树合并的题都是用别的方法做的QAQ)。yy了半天尝试码了一下发现完美爆炸,内心慌的一批,不停在想这水题现在得有多少多少人切了。
出去上了个厕所,期间被原先的同学抓住问了几句,回来感觉心态稍好。很快搞出一个$O(n^2\ log\ n)$的做法调了出来,感觉数据范围刚好不会被卡。然后开始肝T1,尝试了各种奇特办法都以码力不够(其实是思路太鬼畜)而告终。两个小时啥也没干无奈之下乱打了一个随机化扔了。中间突然想到T2线段树合并应该怎么写,但是觉得之前的做法也没问题就懒得改了。T3最后没读懂题暴力打挂。
……
T2果然被卡了。T1随机化突然不靠谱。
刚有几场考的凑合就又炸了,知识漏洞还是太多。
往好处想这次考试至少重新理解了线段树合并这个知识点,以后肯定不会出问题了。
至于乱搞题不会做,这只能说自己思维太死板,只会套学过的模式,遇到完全需要自己研究的就什么也想不出来了。有思维习惯的原因,但更多的还是缺乏练习,没有养成良好的思考方式。
A.Emotional Flutter
只要确定了出发点,那么每一步的位置就都确定了。
把黑块的边界通过$mod\ K$处理一下,把它们映射到$[0,K-1]$里。之后将区间排序,判断是否有连续的s个合法位置即可。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int N=5e5+5;
#define pa pair<int,int>
int S,K,n,a[N],T;
pa p[N];
void work()
{
S=read();K=read();n=read();
for(int i=1;i<=n;i++)
a[i]=read();
int sum=0,cnt=0;
for(int i=1;i<=n;i++)
{
sum+=a[i];
if((i&1)==0)continue;
if(a[i]>=K)
{
puts("NIE");
return ;
} int lp=sum-a[i],rp=sum-1,bl=lp/K,br=rp/K;
sum%=K;
if(bl>=br)p[++cnt]=make_pair(lp%K,rp%K);
else
{
p[++cnt]=make_pair(lp%K,K-1);
p[++cnt]=make_pair(0,rp%K);
} }
sort(p+1,p+cnt+1);
int res=0,x=-1;
for(int i=1;i<=cnt;i++)
{
res=max(res,p[i].first-x-1);
x=max(x,p[i].second);
}
res=max(res,p[1].first+K-x-1);
if(res>=S)puts("TAK");
else puts("NIE");
}
int main()
{
T=read();
while(T--)work();
return 0;
}
B.Endless Fantasy
裸的线段树合并。注意到合并到叶结点时的信息处理。
#include<cstdio>
#include<iostream>
#include<cstring>
typedef long long ll;
#define pa pair<ll,int>
using namespace std; const int L=1<<20|1;
char buffer[L],*S,*T;
#define getchar() ((S==T&&(T=(S=buffer)+fread(buffer,1,L,stdin),S==T))?EOF:*S++) int read()
{
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int N=4e5+5;
int n,m;
int to[N<<1],head[N],nxt[N<<1],tot;
pa ans[N];
void add(int x,int y)
{
to[++tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
int type,root[N<<5],ls[N<<5],rs[N<<5],maxx[N<<5];
ll maxw[N<<5];
void up(int k)
{
if(maxw[ls[k]]>=maxw[rs[k]])
{
maxw[k]=maxw[ls[k]];
maxx[k]=maxx[ls[k]];
}
else
{
maxw[k]=maxw[rs[k]];
maxx[k]=maxx[rs[k]];
}
}
void update(int &k,int l,int r,int pos,int num)
{
if(!k)k=++type;
if(l==r)
{
maxw[k]+=num;
maxx[k]=pos;
return ;
}
int mid=l+r>>1;
if(pos<=mid)update(ls[k],l,mid,pos,num);
else update(rs[k],mid+1,r,pos,num);
up(k);
}
int merge(int x,int y,int l,int r)
{
if(!x||!y)return x+y;
if(l==r)
{
maxw[x]=maxw[x]+maxw[y];
maxx[x]=l;
return x;
}
int mid=l+r>>1;
ls[x]=merge(ls[x],ls[y],l,mid);
rs[x]=merge(rs[x],rs[y],mid+1,r);
up(x);
return x;
}
void dfs(int x,int f)
{
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
if(y==f)continue;
dfs(y,x);
merge(root[x],root[y],1,m);
}
ans[x]=make_pair(maxw[root[x]],maxx[root[x]]);
}
int main()
{
n=read();m=read();
for(int i=1;i<n;i++)
{
int x=read(),y=read();
add(x,y);add(y,x);
}
for(int i=1;i<=n;i++)
{
int x=read(),w=read();
update(root[i],1,m,x,w);
}
dfs(1,0);
for(int i=1;i<=n;i++)
printf("%d %lld\n",ans[i].second,ans[i].first);
return 0;
}
C.
不会做啊
[CSP-S模拟测试47]反思+题解的更多相关文章
- [CSP-S模拟测试50]反思+题解
??大部分人都觉得T3是道不可做题去刚T1T2了,于是我就侥幸苟到了前面? 这场考试比较成功的就是快速水掉了T1T2的部分分,1h拿到88分起码为之后硬肝T3上了保险(赛后发现就算T3爆零也能rank ...
- 2019.9.19 csp-s模拟测试47 反思总结
思路接近正解?都想到了?这都是借口呀. 没有用的,往前走吧. T1:Emotional Flutter 我的做法和题解不太一样,我把s放在最后考虑了. 因为出发以后步幅是一样的,所以每一个黑条可以ba ...
- [CSP-S模拟测试48]反思+题解
状态很垃圾的一场考试.感觉“这么多分就够了”的心态很是在给自己拖后腿. 打开题面,第一页赫然写着:$Claris' Contest$. 吓得我差点手一抖关掉.不过后来想想似乎强到变态的人出的题都不是很 ...
- [NOIP模拟测试37]反思+题解
一定要分析清楚复杂度再打!!!窝再也不要花2h20min用暴力对拍暴力啦!!! 雨露均沾(滑稽),尽量避免孤注一掷.先把暴力分拿全再回来刚正解. 即使剩下的时间不多了也优先考虑认真读题+打暴力而非乱搞 ...
- [NOIP模拟测试34]反思+题解
不要陷入思维定势,如果长时间没有突破就要考虑更改大方向. 不要把简单问题复杂化. 做完的题就先放下,不管能拿多少分.不能过一段时间就回来调一下. $Solutions:$ A.次芝麻 因为$n+m$始 ...
- [NOIP模拟测试32]反思+题解
又考挂了QAQ 总rank直接滑出前20 晚上考试脑子还算比较清醒,可惜都用来xjb乱想错误思路了. T1一眼推柿子,然而并没有头绪所以先码了个暴力.然后…… 一个垃圾暴力我调了1h,大概解决了两位数 ...
- 2019.8.1 NOIP模拟测试11 反思总结
延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...
- 2019.8.14 NOIP模拟测试21 反思总结
模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...
- 2019.8.9 NOIP模拟测试15 反思总结
日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对 ...
随机推荐
- C#操作Access的查询、添加、删除、修改源程序
C#操作Access的查询.添加.删除.修改源程序 using System; using System.Collections.Generic; using System.ComponentMode ...
- window安装nginx
下载安装 到nginx官网上下载相应的安装包,http://nginx.org/en/download.html: 下载进行解压,将解压后的文件放到自己心仪的目录下,我的解压文件放在了d盘根目录下,如 ...
- [CSP-S模拟测试]:涂色游戏(DP+组合数+矩阵快速幂)
题目描述 小$A$和小$B$在做游戏.他们找到了一个$n$行$m$列呈网格状的画板.小$A$拿出了$p$支不同颜色的画笔,开始在上面涂色.看到小$A$涂好的画板,小$B$觉得颜色太单调了,于是把画板擦 ...
- [CSP-S模拟测试]:Set(随机化)
题目描述 你手上有$N$个非负整数,你需要在这些数中找出一个非空子集,使得它的元素之和能被$N$整除.如果有多组合法方案,输出任意一组即可.注意:请使用高效的输入输出方式避免输入输出耗时过大. 输入格 ...
- python中nonlocal 的作用域
''' nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量. ''' def work(): x = 0 def new_work(): nonlocal x x=x+3 retur ...
- Red Gate .NET Reflector
Debug and decompile inside Visual Studio (VSPro edition) Use the Visual Studio debugger Use your reg ...
- CSS属性去除图片链接时的虚线框
CSS 之outline (轮廓)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用.outline 属性是一个简写属性,用于设置元素周围的轮廓线.注释:轮廓线不会占据空间,也不一定是 ...
- python基本数据类型集合set操作
转:https://www.cnblogs.com/tina-python/p/5468495.html 一.集合的定义 set集合,是一个无序且不重复的元素集合. 集合对象是一组无序排列的可哈希的值 ...
- javaIO流(一)--File类的基本使用
一.File文件操作类 在java语言中提供有对于文件操作系统的支持,这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创 ...
- Scrapy框架: 通用爬虫之CrawlSpider
步骤01: 创建爬虫项目 scrapy startproject quotes 步骤02: 创建爬虫模版 scrapy genspider -t quotes quotes.toscrape.com ...