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$分吗. 几分钟后. 这除法分块太劲了..(你 ...
随机推荐
- 关于第一次将STM32与电脑连接情况
安装了Keil(ARM)版本之后,不管是自己编程,还是配套的程序运行.我们都想把它下载到STM32芯片里面,在板子上运行.这里介绍几种方法. 1.用J-LINK下载调试. 这个工具,可以直接点击kei ...
- minicom 的使用
1.切换到 root 用户. [root@localhost btools]#su - 2. 查找有效的串设备. [root@localhost ~]#cat /proc/devices ... 4 ...
- vue实现curd功能
一.实现效果 二.实现 (一)实现增加用户功能 Vuserlist组件中 <template> <div class="panel panel-default"& ...
- selenium 操作键盘事件
一.key包提供按键方法 使用必须先引用key包:from selenium.webdriver.common.keys import Keys 键盘事件,在现实操作中我们习惯性的按tab见切换到写一 ...
- eclipse背景设置什么颜色缓解眼睛疲劳
eclipse背景设置什么颜色缓解眼睛疲劳 1.打开window->Preference,弹出Preference面板 2.展开General标签,选中Editors选项,展开. 3.选中 Te ...
- 容斥原理解一般不定方程——cf451E经典题
/* 给定n个盒子,第i个盒子有ai朵花,现在从中选取m朵花,问选取方案数 用容斥定理解决 m=x1+x2+..+xn C(m+n-1,n-1)+sum{ (-1)^p * C(m+n-1-(1+n1 ...
- NX二次开发-UFUN修改当前导出CGM文件选项设置UF_CGM_set_session_export_options
文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...
- P1566 加等式
P1566 加等式 题目描述 对于一个整数集合,我们定义“加等式”如下:集合中的某一个元素可以表示成集合内其他元素之和.如集合{1,2,3}中就有一个加等式:3=1+2,而且3=1+2 和3=2+1是 ...
- 使用 Lookaside List 分配内存
1. 概述 windows 提供了一种基于 lookaside list 的快速内存分配方案,区别于一般的使用 ExAllocatePoolWithTag() 系列函数的内存分配方式.每次从 look ...
- Codeforces 1163A - Eating Soup
题目链接:http://codeforces.com/problemset/problem/1163/A 题意:n 只猫围成一圈,离开 m 只,最多剩下几组猫. 思路:当 n == m 即猫都离开时 ...