「考试」CSP-S 2020
乱扯
爆炸的过程是这样的
写了\(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的更多相关文章
- AC日记——「HNOI2017」礼物 LiBreOJ 2020
#2020. 「HNOI2017」礼物 思路: A题进程: 一眼出式子->各种超时过不去->看题解明白还有fft这个东西->百度文库学习fft->学习dft->学习fft ...
- 「考试」noip模拟9,11,13
9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...
- 「考试」$5T$
啊因为最近题实在是好啊,只能四五篇四五篇写了. T1. 括号序列的确简单. 当我们维护左右$cnt$后. 到一个左括号的地方的话. 答案就是:$$\sum\limits_{i=1}^{min(lc,r ...
- 「考试」小P的生成树
考场上想到一半正解,没想到随机化,不然也许能够$A$掉. 题目所说的其实就是向量加法,求模长最长的向量生成树. 我们考虑对于两个向量,必然在平行边形对角线方向上,他们的投影和是最大的,长度就是对角线长 ...
- 「考试」num (破800纪念)
是第800题啦. 怎么说,$rvalue$学长写的已经挺好的了,我在这里做一点补充,写一点理解. 但是这道题真的值得写一下题解,毕竟一百行也算是数论工程题了. 定义函数 $Fp(k,n)$为$n$中$ ...
- 「考试」 Or
不得不说是一道多项式神题了. 虽然说颓代码颓的很厉害不过最终A掉了. 好好讲一讲这道题. 涉及的知识点是:高阶导数,NTT,指数型母函数,泰勒公式,以及意志力和数学推导能力. 那就开始了. 一个测试点 ...
- 「考试」weight
正解是树剖. 首先Kru求最小生成树. 然后分别考虑树边和非树边的答案. 首先是非树边,非树边链接的两个点在MST上能够构成一条链. 这条链上最大的那条边-1就是这条边的答案. 为什么. 模拟Kru的 ...
- 「考试」联赛模拟36-39,noip晚间小测2-3
36.1 party(CF623D) 很是鸡贼的一道题 首先要明确一点,抓人是有策略,而不是随机的,可以认为等同于按一个给定的顺序猜人,那么这时猜中的概率就只是抓住这个人的概率了 对于每一次猜测,因为 ...
- 「NOWCODER」CSP-S模拟赛第3场
「NOWCODER」CSP模拟赛第3场 T1 货物收集 题目 考场思路即正解 T2 货物分组 题目 考场思路 题解 60pts 算法:一维 DP 100pts 算法:一维 DP ?线段树 + 单调栈 ...
随机推荐
- electron 实现文件下载管理器
文件下载是我们开发中比较常见的业务需求,比如:导出 excel. web 应用文件下载存在一些局限性,通常是让后端将响应的头信息改成 Content-Disposition: attachment; ...
- .netcore跨域设置
跨域 广义上讲,跨域是指一个域下的文档或者脚本试图去请求访问另一个域下的资源(像我们直接通过代码使用http请求资源,或者是使用辅助工具(例如postman)是可以直接访问的,没有跨域的概念):而我们 ...
- Python中的小括号()、中括号[]、花括号{}区别
Python中最常见括号的区别: 在Python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{}:其作用也不相同,分别用来代表不同的Python基本内置数据类型. Python中的 ...
- Linux 基础命令及基本目录
Linux 基础命令及基本目录 一.网卡 1.网卡配置文件路径 /etc/sysconfig/network-scripts/ifcfg-eth0 配置文件: TYPE=Ethernet # 以太 ...
- 搭建面向NET Framework的CI/CD持续集成环境(一)
前言 网上大多数都是针对主流的Spring Cloud.NET Core的CI/CD方案.但是目前国内绝大部分的公司因为一些历史原因无法简单的把项目从NET Framework切换升级到NET Cor ...
- APP分享多张图片到微信和朋友圈
产品需求: 微信分享多图至好友,朋友圈.由于微信禁用了分享9图至朋友圈功能,这里分享微信只是将图片保存至本地,具体让用户手动分享. 问题分析: 微信没有提供分享多图的SDK,因此我们实现调用系统自带的 ...
- this.getClass().getResource("") url path file 区别
首先注意 "/word/appointDismiss.docx" 前面一定要加 /,有一次我就是忘记加/ 查了半天错, 不能写成 "word/appointDismiss ...
- Spring扩展之二:ApplicationListener
1.介绍 用于监听应用程序事件的接口. 子接口:GenericApplicationListener,SmartApplicationListener. 通过ApplicationEvent类和App ...
- API的使用(3)Arrays 类,Math类,三大特性--继承
Arrays类 概述 java.util.Arrays此时主要是用来操作数组,里面提供了很多的操作API的方法.如[排序]和[搜索]功能.其所有的方法均为静态方法,调用起来非常简单. 操作数组的方 ...
- Frogs‘ Neighborhood(POJ 1659 C/C++)
poj 1659 Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路 ...