CSP2020-S 游记
10.11 CSP-S1
自从国庆假期回到学校我申请停课,
从此开始了长达近一个的停课生活。
初赛也是有惊无险地过去了。
一出来发现自己仍旧是大考必败型选手,
对了答案发现我其实错了挺多的,
可能是因为错的都是分值高的吧,
要不是某题好像有歧义补加分,
我应该就连80都没有了
11.4 Day-2
考前最后一次模拟赛,难度就特别离谱:
T1:斯坦纳树+Spfa(原题还是道紫题)
T2:LCA+树上差分(不过这题出的挺好的)
T3:DP+NTT(想法很妙,但有了NTT显然就离谱)
T4:四维偏序(建议不做)
11.5-11.6 Day-1至Day0
这两天在背板:
字符串:AC自动机、Manacher、最小表示法。
数论:线性基
数据结构:点分治、扫描线
11.7 CSP-S2
早上本来想写题的,但害怕下午考砸,就没写了
四个小时的时间其实非常的短,有一说一
前一个半小时在写T1,然后再用了一个小时写T2(主要是读题能力太差了)
剩下两个小时,去写了T4,大概花了一个小时写了个伪七十分代码。
然后T3看懂题目没时间写了,但是至少那个下传加法的想法特别妙
后续
估分: 100+100+0+70
自测: 100+95+0+20
快结束的时候让T4只能过第一个子任务,
然后还没有发现要特判\(2^{64}\)
但是所有网站都是一样的分数估计就稳了
CCF出成绩仍然是215,
wtcl,就只配被吊打,应该先写T3的,说不定就能想到正解了
洛谷 7075 [CSP-S2020] 儒略日
代码(大模拟)
#include <cstdio>
#include <cctype>
using namespace std;
const int lim=2298884,LIM=1721424,st=4713;
const int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
typedef long long lll; lll n; int ans,Q;
inline lll iut(){
lll ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline int calc(int x){
int ans=(st-x+1)*365+1;
if (st-x<13){
for (int i=x;i<st;++i)
if ((i&3)==1) ++ans;
return ans;
}
if ((x&3)<2) ++ans;
x=(x+3)/4*4;
return ans+(st-x)/4;
}
inline int calc2(int x){
return x*365+x/4;
}
inline void Get_Print(int A,int B,int C){
print(A),putchar(32),print(B),putchar(32),print(C);
}
inline void BC(){
putchar(32),putchar(66),putchar(67);
}
inline void Grego(int n,int year,int z){
int ans;
if (n<=31){
Get_Print(n,1,year);
return;
}
else if (n<=59){
Get_Print(n-31,2,year);
return;
}
bool flag=(year&3)==z;
if (n==60&&flag){
Get_Print(n-31,2,year);
return;
}
n-=59+flag;
for (ans=3;ans<13;++ans)
if (n>month[ans]){
n-=month[ans];
}else break;
if (ans>12) --year,ans=1;
Get_Print(n,ans,year);
}
inline lll calc3(int x){
lll ans=1ll*(x-1584)*365+(x-1584)/4;
if (x>1600) ans+=(x-1600)/400-(x-1600)/100;
return ans;
}
inline void juli(int year){
int ans;
if (n<=31){
Get_Print(n,1,year);
return;
}
else if (n<=59){
Get_Print(n-31,2,year);
return;
}
bool flag=((year%100)&&((year&3)==0))||((year%400)==0);
if (n==60&&flag){
Get_Print(n-31,2,year);
return;
}
n-=59+flag;
for (ans=3;ans<13;++ans)
if (n>month[ans]){
n-=month[ans];
}else break;
Get_Print(n,ans,year);
}
int main(){
//freopen("julian.in","r",stdin);
//freopen("julian.out","w",stdout);
Q=iut();
for (int j=1;j<=Q;++j,putchar(10)){
n=iut()+1;
if (n<=LIM){
int l=1,r=st;
while (l<r){
int mid=(l+r+1)>>1;
if (calc(mid)>=n) l=mid;
else r=mid-1;
}
if (l^st) n-=calc(l+1);
if (((l&3)==3)&&l<4700) ++n;
Grego(n,l,1),BC();
}else if (n<=lim){
n-=LIM;
int l=1,r=1581;
while (l<r){
int mid=(l+r)>>1;
if (calc2(mid)>=n) r=mid;
else l=mid+1;
}
if (l>1) n-=calc2(l-1);
Grego(n,l,0);
}else{
n-=lim;
if (n<=273){
int ans;
for (ans=1;ans<10;++ans)
if (n>month[ans]) n-=month[ans];
else break;
Get_Print(n,ans,1582);
}else if (n<=277) Get_Print(n-273,10,1582);
if (n<=277) continue;
n-=277;
if (n<=17) Get_Print(n+14,10,1582);
else{
n-=17;
if (n<=30){
Get_Print(n,11,1582);
}else if (n<=61){
Get_Print(n-30,12,1582);
}else{
n-=61;
if (n<=365) Grego(n,1583,0);
else if (n<=731) Grego(n-365,1584,0);
else{
n-=731;
int l=1585,r=1e9;
while (l<r){
int mid=(l+r)>>1;
if (calc3(mid)>=n) r=mid;
else l=mid+1;
}
if (l^1585) n-=calc3(l-1);
juli(l);
}
}
}
}
}
return 0;
}
洛谷 7076 [CSP-S2020] 动物园
分析
如果某个二进制位没有在已饲养的动物中出现那么这个二进制位不能选,注意特判 \(2^{64}\)
代码
#include <cstdio>
#include <cctype>
using namespace std;
typedef unsigned long long ull;
ull n,m,now,tot,v[71],ans=1;
inline ull iut(){
ull ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
int main(){
n=iut(),m=iut(),iut(),tot=iut();
for (int i=1;i<=n;++i) now|=iut();
for (int i=1;i<=m;++i){
int x=iut(); iut();
if (v[x]) continue;
if (!((now>>x)&1))
v[x]=1,--tot;
}
for (int i=0;i<tot;++i) ans*=2;
if (!n&&!ans) return !printf("18446744073709551616");
return !printf("%llu",ans-n);
}
洛谷 7077 [CSP-S2020] 函数调用
分析
可以将 \(Q\) 次调用当作一个函数也就是求这个函数的值,
可以发现按照这样调用实际上是一个有向无环图的结构。
实际上的修改就是全局乘一个数以及每个加法操作乘上对应的数
将乘法标记上传,再将加法标记下传,最后就是每个加法的统计
代码
#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N=100011,mod=998244353; struct node{int y,next;}e[N*10];
int deg[N],q[N],wl[N],a[N],opt[N],X[N],now=1,ww[N],as[N],et,n,m,Q,b[N],ws[N];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline signed mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
inline void add(int x,int y){++deg[y],e[++et]=(node){y,as[x]},as[x]=et;}
inline void Topsort(){
rr int head=1,tail=0;
for (rr int i=1;i<=m;++i)
if (!deg[i]) q[++tail]=i;
while (head<=tail){
rr int x=q[head++];
for (rr int j=as[x];j;j=e[j].next)
if (--deg[e[j].y]==0) q[++tail]=e[j].y;
}
}
inline void pup(){
for (rr int i=m;i;--i)
for (rr int j=as[q[i]];j;j=e[j].next)
wl[q[i]]=1ll*wl[q[i]]*wl[e[j].y]%mod;
}
inline void pdown(){
for (rr int i=1;i<=m;++i)
for (rr int j=as[q[i]],t=1;j;j=e[j].next)
ws[e[j].y]=mo(ws[e[j].y],1ll*ws[q[i]]*t%mod),
t=1ll*t*wl[e[j].y]%mod;
}
signed main(){
n=iut(); for (rr int i=1;i<=n;++i) a[i]=iut();
m=iut();
for (rr int i=1;i<=m;++i)
switch (opt[i]=iut()){
case 1:{
X[i]=iut(),ww[i]=iut(),wl[i]=1;
break;
}
case 2:ww[i]=wl[i]=iut(); break;
case 3:{
wl[i]=1;
for (rr int o=iut();o;--o)
add(i,iut());
break;
}
}
Topsort(),pup(),Q=iut();
for (rr int i=1;i<=Q;++i) b[i]=iut();
for (rr int i=Q;i;--i)
ws[b[i]]=mo(ws[b[i]],now),now=1ll*now*wl[b[i]]%mod;
pdown();
for (rr int i=1;i<=n;++i) a[i]=1ll*a[i]*now%mod;
for (rr int i=1;i<=m;++i) if (opt[i]==1)
a[X[i]]=mo(a[X[i]],1ll*ww[i]*ws[i]%mod);
for (rr int i=1;i<=n;++i) print(a[i]),putchar(32);
return 0;
}
洛谷 7078 [CSP-S2020] 贪吃蛇
分析
如果最强的蛇吃了最弱的蛇后没有变成最弱蛇那它一定会吃。
否则最强的蛇变成最弱的蛇时考虑下一条最强蛇会不会变成最弱蛇,
实际上如果一直轮下去直到最强蛇不是最弱蛇那么最强蛇一定会吃掉最弱蛇,
这样最强蛇吃不吃只与最后一条最强蛇与其距离的奇偶性决定。
由于吃掉最弱蛇之后结束前最强蛇仍然具有单调性,所以用两个队列维护即可
代码
#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int N=1000011;
pair<int,int>q0[N],q1[N],MX,MN;
int h0,h1,t0,t1,flag=1,n,tot,F,a[N];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline signed answ(){
h0=h1=1,t0=n,tot=t1=0,F=-1;
for (rr int i=1;i<=n;++i) q0[n-i+1]=make_pair(a[i],i);
for (rr int i=n-1;i;--i){
if (h0>t0||(h1<=t1&&q0[h0]<q1[h1])) MX=q1[h1++]; else MX=q0[h0++];
if (h0>t0||(h1<=t1&&q0[t0]>q1[t1])) MN=q1[t1--]; else MN=q0[t0--];
MX.first-=MN.first;
if (h0>t0||(h1<=t1&&q0[t0]>q1[t1])) MN=q1[t1]; else MN=q0[t0];
if (i>1&&MX<MN) F=(F==-1)?0:(F^1);
else if (~F) return n-F-tot;
else ++tot;
q1[++t1]=MX;
}
return n-tot;
}
signed main(){
for (rr int T=iut();T;--T){
if (flag){
n=iut(),flag=0;
for (rr int i=1;i<=n;++i) a[i]=iut();
}else{
for (rr int Q=iut(),x;Q;--Q)
x=iut(),a[x]=iut();
}
printf("%d\n",answ());
}
return 0;
}
CSP2020-S 游记的更多相关文章
- CSP2020复赛游记
CSP2020复赛游记 由于本蒟蒻侥幸通过PJ和TG的分数线并且侥幸的拿了一等,所以侥幸的来参加复赛 11.04~11.05 期中考,挂 11.06 对答案,炸 11.07 开始了第一次CSP复赛 坐 ...
- 【游记】CSp2020
同步发表于洛谷博客 初赛 Day -2 做了个模拟(非洛谷),只有一丁点分,显然过不了 (盗张 i am ak f 的图) Day 0 颓,颓,颓,又做了一套模拟,坚定了退役的信心. Day 1 人好 ...
- CSP2020 游记
Day -28 后天就初赛了,考了一套模拟题,自闭,心态爆炸,感觉退役不远了 Day -26(初赛) 香农是谁??? 手写随机nth_element与O(n)的哈希表??? 阅读程序T2时间复杂度分析 ...
- CSP2020游记
初赛 这次考试完全没准备好啊-- Day0 (10.10) 本来打算看看初赛的内容 然后因为各种原因咕了-- 就做了一下洛谷的模拟卷 结果 \(40 \text{min}\) 得 \(80 \text ...
- CSP-2020 退役记
CSP-2020 游记 第2次参加CSP-- Day -5~-7 每天笔试+机试 Day -8~-9 在家放松(写作业) Day 0 鸡鸭月考 Day 1 9:30以前 愉快的在别人月考的时候离开鸡鸭 ...
- NOI2021 同步赛游记
写在前面的话 为什么叫游记呢?因为我第一天是在划水中度过的,错过了对原题的发现. O n e I n D a r k \tt OneInDark OneInDark 无比风光地去了浙江,却倒霉地遇上了 ...
- 【20161203-20161208】清华集训2016滚粗记&&酱油记&&游记
先挖坑(这个blog怎么变成游记专用了--) 已更完 #include <cstdio> using namespace std; int main(){ puts("转载请注明 ...
- 【20160722-20160728】NOI2016滚粗记&&酱油记&&游记
先挖坑 #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.c ...
- NOIp2016 游记
DAY -2 不要问我为什么现在就开了一篇博客. 本来想起个NOIp2016爆零记或者NOIp2016退役记之类的,但是感觉现在不能乱立flag了.所以就叫游记算了. 前几场模拟赛崩了一场又一场,RP ...
- NOIP2016游记
只是游记而已.流水账. Day0:忘了. Day1:看完T1,本以为T2一如既往很简单,结果看了半天完全没有思路.然后看了一眼T3,期望,NOIP什么时候要考期望了,于是接着看T2.一开始我推的限制条 ...
随机推荐
- Java - 将TXT文本文件转换为PDF文件
与TXT文本文件,PDF文件更加专业也更适合传输,常用于正式报告.简历.合同等场合.项目中如果有使用Java将TXT文本文件转为PDF文件的需求,可以查看本文中介绍的免费实现方法. 免费Java PD ...
- 利用wiile双层循环打印各种星星---day06
# 十行十列小星星 j = 0 #定义行数 while j<10: #当行数小于10的时候 i=0 #定义列 while i <10: #当列小于10的时候 print('*',end=' ...
- os.path.relpath和os.path.basename,返回文件路径中的文件名
from os import path print(path.relpath("/home/hpcadmin/lw/demo.py", start="/home/hpca ...
- python各版本新特性
# py3.7 https://docs.python.org/zh-cn/3/whatsnew/3.7.html # py3.8 https://docs.python.org/zh-cn/3/wh ...
- django中使用celery异步发送邮件
申请163网易发送邮件权限 在django中settings配置文件 #配置邮件服务器 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBac ...
- Linux的这些命令你需要掌握
查看进程: 查看所有进程:ps -ef 查看指定的进程: ps -ef|grep pid(进程号) 查看前40个内存占用的进程: ps auxw|head -1;ps auxw|sort -rn -k ...
- python代码,读取一个txt文件,将其中的每一行开头加上一个字母a,每一行的结尾加上一个字母b
with open('name.txt', 'r+') as file: lines = file.readlines() file.seek(0) # 将文件指针移回文件开头 file.trunca ...
- Taurus.MVC WebMVC 入门开发教程6:路由配置与路由映射
前言: 在本篇 Taurus.MVC WebMVC 入门开发教程的第六篇文章中, 我们将讨论如何配置路由并映射到控制器和操作方法. 路由是决定应用程序如何响应客户端请求的重要组成部分,因此在 Web ...
- STM32标准库内部Flash读写
STM32标准库FLASH读写 1. STM32内部FLASH介绍 STM32系列一般集成有内部flash,这部分内存可以直接通过指针的形式进行读取.但是由于内部flash一般存储为重要数据或程序运行 ...
- 解决网页无法复制粘贴选中的问题 显示vip无法复制解决方案
方法:先是按F12打开控制台点击console输入以下代码!!!! 解决网页禁止鼠标右键,无法被选中的 第一种: javascript:(function() { function R(a){ona ...