CSP2019-S2总结
前言
赛时:好难啊,什么都不会
刚结束:原来如此
现在:为什么我这么菜
洛谷 5657 格雷码
代码(找规律)
#include <cstdio>
using namespace std;
typedef unsigned long long ull;
ull k,now=1; char c[101]; int n;
int main(){
scanf("%d%llu",&n,&k);
for (int i=1;i<=n;++i){
if (((k/now)&3)==1||((k/now)&3)==2) c[n-i+1]=49;
else c[n-i+1]=48;
now<<=1;
}
for (int i=1;i<=n;++i) putchar(c[i]);
return 0;
}
洛谷 5658 括号树
分析
考虑在树上动态维护一个装入左括号的栈,
一个显然的性质就是以\(i\)结尾的合法括号串个数等于前一个左括号的前驱的个数+1
但是赛时只想到这个性质没有想到用栈维护QWQ
代码
#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N=500011; long long ans,s[N];
struct node{int y,next;}e[N];
int col[N],top,st[N],cnt[N],ls[N],n,k=1,fat[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 dfs(int x){
rr int tmp=0;
if (col[x]){
if (top){
tmp=st[top];
cnt[x]=cnt[fat[tmp]]+1;
--top;
}
}else st[++top]=x;
s[x]=s[fat[x]]+cnt[x];
for (rr int i=ls[x];i;i=e[i].next)
dfs(e[i].y);
if (tmp) st[++top]=tmp;
else if (top) --top;
}
signed main(){
n=iut();
for (rr int i=1;i<=n;++i){
rr char c=getchar();
while (c!='('&&c!=')') c=getchar();
col[i]=c==')';
}
for (rr int i=2;i<=n;++i){
rr int x=iut(); fat[i]=x;
e[++k]=(node){i,ls[x]},ls[x]=i;
}
dfs(1);
for (rr int i=1;i<=n;++i) ans^=1ll*s[i]*i;
return !printf("%lld",ans);
}
洛谷 5659 树上的数
待更
洛谷 5664 Emiya 家今天的饭
待更
洛谷 5665 划分
分析
单调队列裸题,考场没想到qwq
不过这题比较恶心的是要用高精度
根据\((a+b)^2>a^2+b^2\)可以知道要尽量多分段
设\(dp[i]\)表示前\(i\)个位置所能取到的最大的\(j\)
那么\(dp[i]=\max\{j\}[s_i-s_j\geq s_j-s_{dp[j]}]\)
由于\(s\)是单调递增的,那么可以用单调队列维护
代码
#include <cstdio>
#include <cctype>
#define rr register
#define calc(x) ((s[x]<<1)-s[dp[x]])
using namespace std;
const int aod=1073741823,N=40000011;
typedef unsigned uit;
typedef long double ld;
typedef long long lll; lll s[N];
int n,typ,q[N],dp[N],head,tail;
const lll mod=100000000000000000ll;
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 lll mul(lll a,lll b){
a%=mod,b%=mod;
rr lll c=(ld)a*b/mod,ans=a*b-c*mod;
ans=ans<0?ans+mod:(ans>=mod?ans-mod:ans);
return ans;
}
signed main(){
n=iut(),typ=iut();
if (!typ){
for (rr int i=1;i<=n;++i) s[i]=s[i-1]+iut();
}else {
rr uit X=iut(),Y=iut(),Z=iut(),a1=iut(),a2=iut(),a3;
iut(),s[1]=a1,s[2]=a2; rr int TAIL=iut(),L=iut(),R=iut();
for (rr int i=1;i<3;++i){
a3=s[i]%(R-L+1)+L,s[i]=s[i-1]+a3;
if (TAIL==i&&TAIL<n) TAIL=iut(),L=iut(),R=iut();
}
for (rr int i=3;i<=n;++i){
a3=(a2*X+a1*Y+Z)&aod,a1=a2,a2=a3;
a3=a3%(R-L+1)+L,s[i]=s[i-1]+a3;
if (TAIL==i&&TAIL<n) TAIL=iut(),L=iut(),R=iut();
}
}
for (rr int i=1;i<=n;++i){
while (head<tail&&s[i]>=calc(q[head+1])) ++head;
dp[i]=q[head];
while (head<tail&&calc(q[tail])>=calc(i)) --tail;
q[++tail]=i;
}
rr lll ans[2]={0,0},t[2];
for (rr int i=n;i;i=dp[i]){
rr lll t1=s[i]-s[dp[i]];
t[1]=mul(t1,t1),t[0]=(ld)t1*t1/mod;
ans[0]+=t[0],ans[1]+=t[1];
if (ans[1]>=mod) ++ans[0],ans[1]-=mod;
}
if (ans[0]) printf("%lld%017lld",ans[0],ans[1]);
else printf("%lld",ans[1]);
return 0;
}
洛谷 5666 树的重心
待更
后记
wtcl,什么都不会
CSP2019-S2总结的更多相关文章
- CSP2019 S2滚粗记
最好分数:100+20+10+64+64+55 最坏分数:100+20+10+64+36+55 咕咕数据分数:100+25+10+64+60+55 CCF官方: 100+35+10+64+36+55= ...
- CSP2019总结
CSP2019总结 前言 赛前停课集训了两个星期,自认为已经准备充分了,结果... 不知道有没有写挂分,即使一分没挂,满打满算也只有400出头,还是太菜了. Day0 晚上复习了一会,打了会游戏就睡了 ...
- s2 devMode cmdshell
s2 devMode cmdshell 仅支持批量验证,命令执行 链接:http://pan.baidu.com/s/1sl7tgRV 密码:wud8 也可以通过outscan一键获取,之后导入t ...
- 电源相关知识—S0、S1(POS)、S2、S3(STR)、 S4、S5、睡眠、休眠、待机
转 http://blog.sina.com.cn/s/blog_52f28dde0100l3ci.html APM https://en.wikipedia.org/wiki/Advanced_Po ...
- 判断s2是否能够被通过s1做循环移位(rotate)得到的字符串是否包含
问题:给定两个字符串s1和s2,要求判断s2是否能够被通过s1做循环移位(rotate)得到的字符串包含.例如,S1=AABCD和s2=CDAA,返回true:给定s1=ABCD和s2=ACBD,返回 ...
- S2 易买网总结
易买网项目总结 --指导老师:原玉明 不知不觉,又到了S2结业的时间了,S1的项目KTV项目还历历在目.一路走来,感觉时间过的好快,我们离就业也越来越近... 展示: 1.主页面(首页) 01.商品分 ...
- 445. Add Two Numbers II ——while s1 or s2 or carry 题目再简单也要些测试用例
You are given two linked lists representing two non-negative numbers. The most significant digit com ...
- 写一个函数,实现两个字符串的比较。即实现strcmp函数,s1=s2时返回0,s1!=s2时返回二者第一个不同字符的ASCII值。
#include<stdio.h> #include<stdlib.h> int main(){ setvbuf(stdout,NULL,_IONBF,); ],s2[]; i ...
- ACPI电源管理中的S0 S1 S2 S3 S4 S5
电源选项中S0,S1,S2,S3,S4,S5的含义以 ACPI 的规格来说吧!ACPI(Advanced Configuration and Power Interface),即高级配置与电源接口.这 ...
- S2第一本书内测
<深入.NET平台和C#编程>内部测试题-笔试试卷 一 选择题 1) 以下关于序列化和反序列化的描述错误的是( C). a) 序列化是将对象的状态存储到特定存储介质中的过程 b) 二进制格 ...
随机推荐
- java怎么打印一个对象的内存地址
在Java一般使用HashCode来代表对象的地址,但是两个相同的对象就不行了,两个相同的对象的hashcode是相同的. 如果要对比两个相同的对象的地址可以使用,System.identityHas ...
- 最简单的python判断是否是回文
def isNumberPalindrome(number): if isinstance(number, int): number = str(number) return number == nu ...
- React 组件通信方式
人生的游戏不在于拿了一副好牌,而在于怎样去打好坏牌,世上没有常胜将军,勇于超越自我者才能得到最后的奖杯. 1. 父子组件通信方式 1.1 父组件传递到子组件 直接通过属性进行传递,数据的传递可以提高组 ...
- 【LeetCode链表#11】环形链表II(双指针)
环形链表II 力扣题目链接(opens new window) 题意: 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,使用整数 pos 来表示 ...
- 教你如何用Keepalived和HAproxy配置高可用 Kubernetes 集群
本文分享自华为云社区<使用 Keepalived 和 HAproxy 创建高可用 Kubernetes 集群>,作者:江晚正愁余. 高可用 Kubernetes 集群能够确保应用程序在运行 ...
- 【Azure 应用服务】应用代码中需要使用客户端证书访问服务接口,部署在应用服务后报错不能找到证书(Cannot find the X.509 certificate)
问题描述 在应用中,需要访问另一个服务接口,这个接口需要使用客户端证书进行认证.在代码中使用 System.Security.Cryptography.X509Certificates 加载Windo ...
- 【Azure 应用服务】记一次Azure Spring Cloud 的部署错误 (az spring-cloud app deploy -g dev -s testdemo -n demo -p ./hellospring-0.0.1-SNAPSHOT.jar --->>> Failed to wait for deployment instances to be ready)
问题描述 使用Azure Spring Cloud服务,在部署时候失败,收到错误消息为: c:\project\hellospring>az spring-cloud app deploy -g ...
- 【Azure 应用服务】如何查看App Service Java堆栈JVM相关的参数默认配置值?
问题描述 如何查看App Service Java堆栈JVM相关的参数默认配置值? 问题解答 可以通过App Service的高级管理工具(kudu:)来查看JVM的相关参数,使用命令:java -X ...
- Java 多线程------多线程的创建,方式一:继承于Thread类
1 package com.bytezero.thread; 2 3 /** 4 * 多线程的创建,方式一:继承于Thread类 5 * 1.创建一个继承于Thread类的子类 6 * 2.重写Thr ...
- linux 三剑客命令
Linux 命令集合 目录 Linux 命令集合 基础概念 1 软连接和硬链接 1.1 基础概念 1.2 如何创建软链接 零.正则 01 区别 02 通配符 03 基础正则 04 扩展正则 一 awk ...