csps模拟83最大异或和简单的括号序列旅行计划题解
题面:https://www.cnblogs.com/Juve/articles/11733280.html
最大异或和:
简单博弈,小Q一定不会输,如果异或和为0,则平局,因为无论小Q如何拿,小T都会拿到和小Q一样
如果异或和不为0,则小Q只要取走二进制下最高位的那个数即可
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int MAXN=1e5+;
int t,n,w[MAXN],tot=;
signed main(){
scanf("%lld",&t);
while(t--){
tot=;
scanf("%lld",&n);
for(int i=;i<=n;++i) scanf("%lld",&w[i]),tot^=w[i];
for(int i=,u,v;i<n;++i) scanf("%lld%lld",&u,&v);
if(tot!=) puts("Q");
else puts("D");
}
return ;
}
简单的括号序列:
组合数学,记住不要重复
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
#define re register
using namespace std;
const int MAXN=,mod=1e9+;
int len,ans=,f[MAXN],g[MAXN];
char s[MAXN];
int fac[MAXN],inv[MAXN];
int q_pow(int a,int b,int p){
int res=;
while(b){
if(b&) res=res*a%p;
a=a*a%p;
b>>=;
}
return res;
}
void get_c(int N){
fac[]=fac[]=inv[]=;
for(int i=;i<=N;++i) fac[i]=fac[i-]*i%mod;
inv[N]=q_pow(fac[N],mod-,mod);
for(int i=N-;i>=;--i) inv[i]=inv[i+]*(i+)%mod;
}
int C(int n,int m){
if(m>n) return ;
if(m==n) return ;
return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
signed main(){
scanf("%s",s+);
len=strlen(s+);
get_c(len+);
for(re int i=;i<=len;++i){
f[i]=f[i-];
if(s[i]=='(') ++f[i];
}
for(re int i=len;i>;--i){
g[i]=g[i+];
if(s[i]==')') ++g[i];
}
for(int i=;i<=len;++i){
if(s[i]=='(') ans=(ans+C(f[i]+g[i]-,g[i]-))%mod;
}
printf("%lld\n",ans);
return ;
}
旅行计划:
floyed终于用上了。。。
设f[i][j][k]表示从i到j走k步的最短距离,这很好转移
然后设g[i][j][k]表示从i到j走k×100步的最短距离,用f数组转移
然后把f数组按照k从大到小更新,把f数组转化为i到j走至少k步的最短距离
然后询问时的答案就是min(g[s][i][k/100]+f[i][t][k%100]),$i\in[1,n]$
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define re register
using namespace std;
const int inf=0x3f3f3f3f;
int n,m,mp[][],q,ans,s,t,k,f[][][],g[][][];
void floyed(){
for(int i=;i<=n;++i) f[i][i][]=g[i][i][]=;
for(int k=;k<=;++k){
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
for(int p=;p<=n;++p)
f[i][j][k]=min(f[i][j][k],f[i][p][k-]+mp[p][j]);
}
for(int k=;k<=;++k){
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
for(int p=;p<=n;++p)
g[i][j][k]=min(g[i][j][k],g[i][p][k-]+f[p][j][]);
}
for(int i=;i<=n;++i){
for(int j=;j<=n;++j)
for(int k=;k>=;--k)
f[i][j][k]=min(f[i][j][k+],f[i][j][k]);
}
}
signed main(){
scanf("%d%d",&n,&m);
memset(mp,0x3f,sizeof(mp));
memset(f,0x3f,sizeof(f));
memset(g,0x3f,sizeof(g));
for(re int i=,u,v,w;i<=m;++i){
scanf("%d%d%d",&u,&v,&w);
mp[u][v]=min(mp[u][v],w);
}
floyed();
scanf("%d",&q);
while(q--){
ans=inf;
scanf("%d%d%d",&s,&t,&k);
for(int i=;i<=n;++i)
ans=min(ans,g[s][i][k/]+f[i][t][k%]);
if(ans>=inf) ans=-;
printf("%d\n",ans);
}
return ;
}
csps模拟83最大异或和简单的括号序列旅行计划题解的更多相关文章
- CSPS模拟 83
紧张起来,集训已过半! 稍微有点惆怅.. T1 什么玩意,神仙树形dp? 没思路,先去T2. (遇到难题就绕过去是真的爽啊) T2 $n^2$暴力很好打 组合数是不是有规律? 找一下规律,发现十分眼熟 ...
- [CSP-S模拟测试]:简单的括号序列(组合数)
题目传送门(内部题82) 输入格式 一行一个字符串$ss$,保证$ss$中只包含$'('$和$')'$. 输出格式 一行一个整数,表示满足要求的子序列数对$10^9+7$的结果. 样例 样例输入1: ...
- [CSP-S模拟测试]:最大异或和(数学)
题目传送门(内部题81) 输入格式 第一行一个整数$T(T\leqslant 20)$,表示测试数据组数 接下来$T$组,对于每一组,第一行一个整数$n$ 第二行有$n$个整数,为$w_1,w_2.. ...
- csps模拟85表达式密码,电压机制,括号密码题解
题面:https://www.cnblogs.com/Juve/articles/11733280.html 表达式密码: 是个水题... #include<iostream> #incl ...
- csps模拟67神炎皇,降雷皇,幻魔皇题解
题面:https://www.cnblogs.com/Juve/articles/11648975.html 神炎皇: 打表找规律?和$\phi$有关? 答案就是$\sum\limits_{i=2}^ ...
- csp-s模拟测试83(集训过半)
csp-s模拟测试83(集训过半) 一场信心赛.起初$OJ$爆了我就看见全场$A$了$T1$并且夹杂着$A$掉$T2$我就很难受. 这场比赛没有深入思考,很失败,一个多小时后就结束了我罪恶的一生. 0 ...
- csp-s模拟测试98
csp-s模拟测试98 $T1$??不是我吹我轻松手玩20*20.$T2$装鸭好像挺可做?$T3$性质数据挺多提示很明显? $One$ $Hour$ $Later$ 这$T1$什么傻逼题真$jb$难调 ...
- csp-s模拟测试86
csp-s模拟测试86 分屋前的最后一次考试,我早就放弃了自己. 02:02:46 70 02:02:57 03:16:08 100 03:16:08 $T1$忘了按位计算,达哥按位计算的$T1$当时 ...
- csp-s模拟测试95
csp-s模拟测试95 去世场祭. $T1$:这不裸的除法分块吗. $T2$:这不裸的数据结构优化$Dp$吗. $T3$:这不裸的我什么都不会搜索骗$30$分吗. 几分钟后. 这除法分块太劲了..(你 ...
随机推荐
- ros机器人导航设置原点,目标点
之前利用movebase导航定位都是通过rviz用鼠标指来指去,实验时非常方便,但实际应用总不能也人工指来指去吧,这怎么体现智能呢 启动导航后,用以前使用的rviz设设置目标点来获取map坐标系下的位 ...
- libevent使用IOCP网络模型的示例
这段时间抽空学习了一下强大的网络库libevent,其使用标准C语言编写,支持Windows.Linux.Mac等等主流操作系统,早期版本不支持Windows的IOCP,最新版本已经添加上了,在网上找 ...
- easyui 弹出框调用外部js函数 提示“Microsoft JScript 运行时错误: 缺少对象”
昨天遇见一个很诡异的问题 我用easyui做了一个网站,其中有一个a页面和一个b页面,我通过easyui的window功能,在a页面中弹出了一个b页面,在b页面中,我用到了一个外部js的函数c,我在b ...
- 第一类和第二类Stirling数
做了老是忘…… 实际问题: 找维基百科.百度百科…… 第一类Stirling数 n个元素构成m个圆排列 S(n,m)=S(n-1,m-1)+(n-1)*S(n-1,m) 初始 S(0,0)=1 S(n ...
- thinkphp 模板驱动
模板引擎驱动完成了第三方模板引擎的支持,通过定义模板引擎驱动,我们可以支持Smarty.TemplateLite.SmartTemplate和EaseTemplate等第三方模板引擎. 默认的模板引擎 ...
- thinkphp入口文件
ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个应用都有一个统一(但不一定是唯一)的入口. 应该说,所有应用都是从入口文件开始的,并且不同应用的入口文件是类似的. 入口文件定 ...
- 几道51nod上据说是提高组难度的dp题
1409 加强版贪吃蛇 听着懵逼做着傻逼. 每个格子只能经过一次,穿过上下界答案清0,不考虑穿的话就随便dp.如果要穿就是从尽可能上面的位置穿过上界,尽可能下面的位置穿过下界. 那么转移这一列之前找一 ...
- NX二次开发-获取切换按钮的当前状态UF_MB_ask_toggle_state
NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...
- NX二次开发-打开part对话框UF_UI_open_part
这是UFUN帮助的官方例子 /****************************************************************************** Copyri ...
- HDU6440 Dream 2018CCPC网络赛-费马小定理
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门 原题目描述在最下面. 给定一个素数p ...