【刷题笔记】2019 CSP-S

news/2024/9/23 22:30:38

2019 CSP-S 题目整理

A-格雷数

思路简介


思路很简单,如果编号在中点的左边那么就输出0,否则输出1,同时还要改变编号。

代码实现


#include<bits/stdc++.h>
#define maxn 80
using namespace std;
typedef __int128 int1;
int1 n,k;
__int128 read(){char ch=getchar();__int128 s=0,f=1;while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}while(ch<='9'&&ch>='0'){s=(s<<3)+(s<<1)+ch-'0';ch=getchar();}return s*f;
}
void dfs(int cur,int1 x){//cur位,x号int1 mid=(int1)pow(2,cur-1)-1;//cout<<cur<<' '<<mid<<' '<<x<<endl;if(cur==1){if(x==0)cout<<0;else if(x==1)cout<<1;return;}if(x<=mid){cout<<0;dfs(cur-1,x);}else {cout<<1;dfs(cur-1,(int1)pow(2,cur)-x-1);}
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);n=read();k=read();//cout<<k<<endl;dfs(n,k);return 0;
}

——int128


这道题数据给的太毒瘤,\(2^{64}-1\),卡着\(unsigned\ long\ long\)的范围,稍微超过一点就要溢出,所以还是开\(\_int128\)大大的好
因此读入必须使用快读

_int rd(){_int f=1,sum=0;char ch;ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}while(ch<='9'&&ch>='0'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}return sum*f;

输出必须使用快写

void write(_int n){if(n<0)putchar('-'),n=-n;if(n>9)write(n/10);putchar(n%10+'0');
}

B-括号树

题目大意


有一棵树,树上的每个节点是半个括号,要求从树根1到节点\(i\),路径上经过的完全不同的合法子串的个数。
题目中对合法括号串的定义如下:
1.() 是合法括号串。
2.如果 A 是合法括号串,则 (A) 是合法括号串。
3.如果 A,B 是合法括号串,则 AB 是合法括号串。

思路简介


\(sum[i]\)表示从1到节点\(i\)路径上经过的合法子串个数,\(f[i]\)表示第\(i\)个节点对答案的贡献。
来看下面这个例子

\[()((()()))() \]

括号串的中间部分是四个相包含的括号,在与另外两个括号组合时他等价于1个括号,所以

\[(A)=() \]

简化完括号串以后,再来分析。对于

\[A(B)=A() \]

右括号对于答案的贡献一定为对应左括号上一个字符的贡献+1,因为多了去本身的一种方案,即

\[f[x]=f[fa[t]]+1 \]

注意!!在深搜时如果往栈里压进数,在回溯时要弹出;在深搜时如果弹出数,在回溯时要压回栈里。

代码实现


#include<bits/stdc++.h>
#define maxn 500010
#define ll long long
using namespace std;
struct edge{int to,next;
}e[maxn];
int n;
int cnt=0,fa[maxn],head[maxn];
char ch[maxn];
ll f[maxn],sum[maxn],ans=0;
stack<int>st;
void add(int x,int y){e[++cnt].next=head[x];e[cnt].to=y;head[x]=cnt;
}
void write(ll x){if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10+'0');return;
}
void dfs(int u){for(int i=head[u];i;i=e[i].next){int v=e[i].to,cur=-1;if(ch[v]=='('){st.push(v);     }else if(ch[v]==')'){if(!st.empty()){cur=st.top();f[v]=f[fa[cur]]+1;st.pop();}}sum[v]=sum[u]+f[v];dfs(v);if(cur!=-1)st.push(cur);else if(!st.empty())st.pop();}
}
int main(){n=read();for(int i=1;i<=n;i++){ch[i]=getchar();while(ch[i]!='('&&ch[i]!=')'){ch[i]=getchar();}}add(0,1);for(int i=1;i<n;i++){int x,y=i+1;cin>>x;add(x,y);fa[y]=x;}dfs(0);for(int i=1;i<=n;i++){ans^=i*sum[i];//cout<<sum[i]<<' ';}write(ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/63954.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

kettle从入门到精通 第八十七课 ETL之kettle kettle文件上传

1、kettle本身文件上传功能不是很友好,甚至是不能直接使用,需要调整文件上传接口才可以正常接收到文件,本次讲解内容主要是通过自定义插件解决这个问题。 2、通过springboot 编写简单demo,模拟文件上传,接口支持三个参数unitCode、password、和文件dataFile。 java代码如下…

密码学承诺原理与应用 - 概览

作者:@warm3snow https://github.com/warm3snow 微信公众号:密码应用技术实战 博客园首页:https://www.cnblogs.com/informatics/ 标签:技术分享模板目录简介承诺方案原理符号定义方案定义常见承诺方案和原理哈希承诺ElGamal承诺Pedersen承诺零知识证明承诺Sigma承诺Sigma承…

Rhino基础操作1

Rhino的基础操作,包含视图操作、物件选取等非常基础的,本篇未涉及到具体的工具。注:非结构建模专业,纯粹是用Rhino写实用新型专利,所以学了下Rhino的建模。不理解最简面、曲线阶数的影响等,请原谅。--本篇导航--常用命令、鼠标中键菜单 基础设置(修改默认单位尺寸、修改…

arm各个集成开发环境+rvds4.1

ARM 之 各集成开发环境(IDE)说明(Keil、RVDS、ADS、DS-5、MDK) - xiaoheikkkk - 博客园 (cnblogs.com)最近,ARM官网进行了较大的改版,原来很多老工具可以免费下载(付费使用),但是改版后需要有购买凭证才可以下载!部分旧工具(补丁)的具体下载地址为https://silver.a…

python代码

1.求1+2+3+4+5+6+7+8+9+102.

高级语言程序设计第一次个人作业

班级链接:https://edu.cnblogs.com/campus/fzu/2024C 作业要求:https://edu.cnblogs.com/campus/fzu/2024C/homework/13264 学号102400132 姓名叶宇恒 安装作业在编程时容易结尾漏分号

企业级堡垒机 JumpServer

1 堡垒机和 JumpServer 生产应用场景2 JumpServer 安装 2.1 基于 Docker 部署官方说明 https://docs.jumpserver.org/zh/master/install/setup_by_fast/JumpServer 环境要求: 硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘(最低) 案例:基于自定义网络利用Docker部署 JumpServe…

9.23 csp

今天模拟赛出了四道zroi的题,挺GG的。 T1、奇观 因为删除的边比较少,所以从m入手,f[i][j]表示长度为i,终点为j的链的方案数。 C 是长度为3的链,F是 1条 长度为3 的链 和 2条 长度为2 的链。 输出 CCF 即可 G T2、铁路 救命的签到题。 因为每次合并时每走一个点就会减少一个…