乱扯

爆炸的过程是这样的

写了\(2.5h\)的\(T1\)过不去大样例,自闭了

决定调\(T2\)然后过了样例但事实上写的完全是假的

这个时候突然\(T1\)灵光一闪就没再看\(T2\)了

然后就一直调\(T1\)到结束前半小时

然后怀着爆零的觉悟和破碎的心态十来分钟调了一个假的\(T3\)

然后\(T4\)看都没看甚至连白给的\(20pts\)都不带拿的

然后就并不知道自己四个小时做了什么地交程序了

然后就做好了爆零的心理准备

然后发现最后是\(40+10+5=55\)

~有一说一当时发现有分还高兴了一会来着~

然后就被各种吊打各种半年白学了

实际上如果先调\(T2\)是可以拿\(90pts\)的

\(T3\)就算想不出拓扑排序啥的纯暴力也有\(30pts\)啊

\(T1\)拿个\(40pts\)又怎样呢

这不就\(40+90+30+20=180\)了吗

虽然其实也并不算高吧……但是至少能拿的分拿到了,后面心态好点可能也能多往优化的方面想想吧

\(T1\)出的确实挺令人不知道怎么评价的,但是这次碰到也算是个教训吧

至少联赛的时候要先读完四个题然后把暴力都打了再去求正解

毕竟对于现在这个水平的我……能拿的分有时也就是暴力给的吧

笔记

T1 儒略日

模拟

考试时确实想到了400年跳这个操作,大样例一直差1,是因为有个细节没考虑到

1582这个年份,跳完了400开始跳100的时候,第一个一百年是包含被400整除的那个闰年的,忽略这个会差出一天

同时如果写了跳4,也要注意跳到被100整除不被400整除那年的情况

码力不行,调试不行

T2 动物园

可以枚举每一位的情况算出总共可以承载的动物,处理出2的次方减去\(n\)就行了

一位可以用有两种情况,一种是没有与他相关的要求,另一种是有要求,但当前动物已经占上了

两个bool数组就可以处理

需要特判两种情况:一是答案为\(2^{64}\),\(ull\)存不下。另一种是答案为\(2^{64}\)减一个数,可以用\(ull\)下0的按位取反得到\(2^{64}-1\),再减\(n-1\)

T3 函数调用

题里的“树”是一个提示,这题不需要高级数据结构

可以用调用关系建出一个有向无环图

考虑如果只有1操作,拓扑排序后可以记录每个操作实际被调用次数

如果只有2操作,就是拓扑排序处理出每个操作实际使全体乘的数

混合起来思路也类似,需要注意加法操作会因在其之后进行的乘法操作而重复多次

所以倒序处理所有操作,然后按拓扑序将每个点被调用的次数下传到他调用的所有操作,注意这时也要关注之后的乘法操作对之前的加法操作次数产生的影响

T4 贪吃蛇

思路&\(70pts\)做法:

对于当前最大的蛇,如果他吃完后没有变成最小的,他就一定再也不会被吃了,因为由单调不降的性质,他的下一条蛇或者放弃决斗,或者吃了以后变得比他小,这个时候他可以放心吃

如果他吃完后变成了最小的,这个时候需要考虑他的下一条蛇是否“有勇气”吃掉他

这种情况下,当有三条蛇时,最大的蛇不敢吃

那么当有四条蛇是最大的蛇敢吃,五条时不敢吃,以此类推

我们需要考虑当前最大值,最小值和次小值,这个可以用\(set\)来求

用dfs来搜索答案即可

\(70pts\):

//I didn't mean to show off my English skills, but I can't fix my ShuRuFa.
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define N 1000005
#define sll set<node> ll T;
ll n,a[N];
ll k,t1,t2; inline ll read()
{
ll f=0,s=0; char c=getchar();
while(c>'9'||c<'0')f=(c=='-'),c=getchar();
while(c>='0'&&c<='9')s=(s<<3)+(s<<1)+(c^'0'),c=getchar();
return f?-s:s;
} ll ans; struct node
{
ll no,v;
node(){no=v=0;}
node(ll _no,ll _v){no=_no,v=_v;}
bool operator<(const node &b)const{return v!=b.v?v<b.v:no<b.no;}
}; sll S; //k 1-been taking risks 0-x
//return 1-neat 0-eat
bool dfs(bool k)
{
sll::iterator it1,it2,it3;
if(S.size()<=2)return 1;
while(S.size()>2)
{
it1=S.begin(),it2=it1,it3=S.end(),it2++,it3--;
node mx=*it3,mi=*it1,cm=*it2,de=node(mx.no,mx.v-mi.v);
ll tt=S.size();
S.erase(it1),S.erase(it3),S.insert(de);//eat
if(de<cm)
{
if(!dfs(1))//dare to take the risk
{
ans=tt-1;//eat it
return 1;//the previous snake dare not to
}
else//dare not to take the risk --- same as the expectation, and the previous snake dare to;
{
ans=tt;
return 0;
}
}
if(k)return 1;
}
ans=1;
return 1;
} int main()
{
//freopen("snakes.in","r",stdin);
//freopen("snakes.out","w",stdout);
T=read();
for(int i=1;i<=T;i++)
{
S.clear();
if(i==1)
{
n=read();
for(int j=1;j<=n;j++)a[j]=read(),S.insert(node(j,a[j]));
}
else
{
k=read();
for(int j=1;j<=k;j++)t1=read(),t2=read(),a[t1]=t2;
for(int j=1;j<=n;j++)S.insert(node(j,a[j]));
}
ans=n;
dfs(0);//there's no snake been taking risks at first
printf("%lld\n",ans);
}
return 0;
}

后记

出分,\(40+40+20+0=100\),数据真的水。

就应该让我爆零一次才好。

「考试」CSP-S 2020的更多相关文章

  1. AC日记——「HNOI2017」礼物 LiBreOJ 2020

    #2020. 「HNOI2017」礼物 思路: A题进程: 一眼出式子->各种超时过不去->看题解明白还有fft这个东西->百度文库学习fft->学习dft->学习fft ...

  2. 「考试」noip模拟9,11,13

    9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...

  3. 「考试」$5T$

    啊因为最近题实在是好啊,只能四五篇四五篇写了. T1. 括号序列的确简单. 当我们维护左右$cnt$后. 到一个左括号的地方的话. 答案就是:$$\sum\limits_{i=1}^{min(lc,r ...

  4. 「考试」小P的生成树

    考场上想到一半正解,没想到随机化,不然也许能够$A$掉. 题目所说的其实就是向量加法,求模长最长的向量生成树. 我们考虑对于两个向量,必然在平行边形对角线方向上,他们的投影和是最大的,长度就是对角线长 ...

  5. 「考试」num (破800纪念)

    是第800题啦. 怎么说,$rvalue$学长写的已经挺好的了,我在这里做一点补充,写一点理解. 但是这道题真的值得写一下题解,毕竟一百行也算是数论工程题了. 定义函数 $Fp(k,n)$为$n$中$ ...

  6. 「考试」 Or

    不得不说是一道多项式神题了. 虽然说颓代码颓的很厉害不过最终A掉了. 好好讲一讲这道题. 涉及的知识点是:高阶导数,NTT,指数型母函数,泰勒公式,以及意志力和数学推导能力. 那就开始了. 一个测试点 ...

  7. 「考试」weight

    正解是树剖. 首先Kru求最小生成树. 然后分别考虑树边和非树边的答案. 首先是非树边,非树边链接的两个点在MST上能够构成一条链. 这条链上最大的那条边-1就是这条边的答案. 为什么. 模拟Kru的 ...

  8. 「考试」联赛模拟36-39,noip晚间小测2-3

    36.1 party(CF623D) 很是鸡贼的一道题 首先要明确一点,抓人是有策略,而不是随机的,可以认为等同于按一个给定的顺序猜人,那么这时猜中的概率就只是抓住这个人的概率了 对于每一次猜测,因为 ...

  9. 「NOWCODER」CSP-S模拟赛第3场

    「NOWCODER」CSP模拟赛第3场 T1 货物收集 题目 考场思路即正解 T2 货物分组 题目 考场思路 题解 60pts 算法:一维 DP 100pts 算法:一维 DP ?线段树 + 单调栈 ...

随机推荐

  1. git 出现 error: bad signature fatal: index file corrupt

    一次大改版,提交了很多代码,但再次提交提交不了,也拉不下来仓库的代码 提示error bad signature fatal: index file corrupt 在项目有.git这同级打开Git ...

  2. Linux使用tmux

    Tmux功能: 提供了强劲的.易于使用的命令行界面.可横向和纵向分割窗口.窗格可以自由移动和调整大小,或直接利用四个预设布局之一.支持 UTF-8 编码及 256 色终端.可在多个缓冲区进行复制和粘贴 ...

  3. AJAX接口-拉购网职位搜索爬虫

    拉购网职位搜索爬虫 分析职位搜索调用接口: 浏览器开发者模式(快捷键F12)切换手机模式,打开拉购网职位搜索链接 https://m.lagou.com/search.html 输入搜索关键词, 例如 ...

  4. Hangfire只允许同时运行同一个任务

    Hangfire有个机制可以确保所有任务都会被执行,如果当服务器停机了一段时间重新启动时,在此期间的周期任务会几乎同时执行.而大部分时候,我们希望同个周期任务每段时间只运行一个就行了. 或者是如果周期 ...

  5. JavaSE基础语法学习-流程控制

    流程控制 用户交互Scanner Scanner**对象** 下面是创建 Scanner 对象的基本语法: Scanner s = new Scanner(System.in); 接下来我们演示一个最 ...

  6. 经典c程序100例==51--60

    [程序51] 题目:学习使用按位与 & . 1.程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1 2.程序源代码: #include " ...

  7. JavaScript全局变量与局部变量

    JavaScript中存储数据值的容器称为变量.根据变量作用域可将变量分为全局变量和局部变量. 全局变量(Global Variable) 拥有全局作用域,在JavaScript代码中任何地方都有定义 ...

  8. 在Linux下安装C++的OpenCV 3

    最近在看<学习OpenCV3>这本书,所以记录下我在ubuntu16.4下搭建C++版本OpenCV 3.4.5的过程.首先请确保cuda,gcc, g++都安装好了,我这里是cuda 1 ...

  9. Zabbix实现电话告警通知的配置方法分享

    如果要讨论下当下热门的监控系统,我想zabbix应该能够占有自己的一席之地,拥有不小的话语权吧.然而身为一名苦逼的运维,为了不错过重大的告警信息,就需要配置个[电话告警]来进行最快速的通知. zabb ...

  10. 【java从入门到精通】day-07-逻辑运算符-位运算符-条件运算符-扩展赋值运算符

    逻辑与(&&).或(||).非(!) 示例: package operator;​public class Demo05 {    public static void main(St ...