Contest-hunter 暑假送温暖 SRM08
01-07都没写...然后突然来写貌似有点突兀啊...不管了,难得前排记录一下...
吐槽一下赛制...不得不说很强... cf 套oi...很创新...不过还是兹磁ACM或者CF
A-1
数据才2<=n<=3 ...但是一眼过去就先打了个dfs 。
所以这个应该是A-2的题解。
a1应该打表就好了...
A-2
这个就是dfs啊...
搜索出所有的s串的子集,然后暴力判一下...
var s:string;
a:array[..]of string;
i,j:longint;
tot,x:longint;
procedure dfs(dep,last:longint;t:string);
var i:longint;
begin
if dep> then
begin
inc(tot);
a[tot]:=t;
end;
for i:=last+ to length(s) do
dfs(dep+,i,t+s[i]);
end;
begin
readln(s);
dfs(,,'');
for i:= to tot do
begin
x:=;
for j:= to tot do
if (a[i]=a[j])and(length(a[i])=length(a[j])) then inc(x);
if x= then
begin
writeln('Y');
exit;
end;
end;
writeln('N');
end.
A-2
A-3
貌似因为数据随机...所以可以用rp卡... 对于n>10 很可能是"Y" 所以A-2再加个特判可以水...
正解不会QAQ...会了再来补
悄悄咪咪的去看了HR的代码...自己推敲了一波基本上懂了
对于一个01串
很显然 如果 0 或 1 有且仅有两个 辣么就是 “Y” 这时 T 串为 0 或 1
当然还有 其他可能为“Y”。
辣么什么时候捏
就是 比如
0110101
这个串看起来好像很一般,但他就是“Y”。
他的T就是010101
因此我萌就可以发现了 如果s串中存在有且仅有2个连续1 或 0 辣么就可以是“Y”。
所以暴力判一下就好了...
ORZ HR!
var
c:array[''..'']of longint;
s:ansistring;
n,i:longint;
begin
readln(s);
n:=length(s);
for i:= to n do
inc(c[s[i]]);
if (c['']=)or(c['']=) then
begin
writeln('Y');
exit;
end;
if n= then
begin
writeln('N');
exit;
end;
if (s[]=s[])and(s[]<>s[]) then
begin
writeln('Y');
exit;
end;
if (s[n]=s[n-])and(s[n]<>s[n-]) then
begin
writeln('Y');
exit;
end;
for i:= to n- do
if (s[i]=s[i-])and(s[i]<>s[i-])and(s[i]<>s[i+]) then
begin
writeln('Y');
exit;
end;
writeln('N');
end.
A-3
B-1
很明显用dfs水...
搜索出所有子序列,然后暴力判...
var n,m:longint;
a,b,c:array[..]of longint;
ans:int64;
i:longint;
procedure dfs(dep,last:longint);
var i,j:longint;
x:boolean;
begin
if dep=m then
begin
x:=true;
for j:= to m do
if a[c[j]]+b[j]<a[c[j-]]+b[j-] then
begin
x:=false;
break;
end;
if x then inc(ans);
exit;
end;
for i:=last+ to n do
begin
c[dep+]:=i;
dfs(dep+,i);
end;
end;
begin
read(n,m);
for i:= to n do
read(a[i]);
for i:= to m do
read(b[i]);
dfs(,);
writeln(ans);
end.
B-1
B-2
不擅长dp啊QAQ
本来想不看代码自己手动推的...
写完之后一直炸...只能悄悄咪咪的去看葱神代码了...
然后发现貌似差不多啊...改成一样之后还是炸...(最后是一个sb问题)
然后我再改回原来代码就过辣!
思路是酱紫的: 设f[i,j] 表示 c数列以 i 结尾,长度为 j 且满足题目要求的c数列的方案数...
辣么肿么转移捏...
推了一下大概是酱紫的: f[i,j]+=f[k,j-1] 1<=k<=i 且满足 a[i]+b[j]>=a[k]+b[j-1]
这个方程的意思就是说 因为考虑前一位,所以就通过j-1 长度来转移 j ...然后以 i 结尾,所以对于前面的1~(i-1) 都可以进行转移 然后在判是否满足条件
然后初始化就是 f[i,1]=1 因为 对于任意长度为1 的序列方案数就是1
var
n,m:longint;
a,b:array[..]of longint;
i,j,k:longint;
f:array[..,..]of longint;
ans:int64;
begin
read(n,m);
for i:= to n do
read(a[i]);
for i:= to m do
read(b[i]);
for i:= to n do
f[i,]:=;
for i:= to n do
begin
for j:= to m do
for k:= to i- do
if a[i]+b[j]>=a[k]+b[j-] then
f[i,j]:=(f[i,j]+f[k,j-]) mod ;
end;
for i:= to n do
ans:=(ans+f[i,m]) mod ;
writeln(ans);
end.
B-2
B-3
到处搜刮题解QAQ...太笨不懂啊QAQ...
大概就是用个树状数组来优化...
具体优化不会QAQ...
貌似B-3数据没弄啊...悄悄咪咪去交个B-2
C-1
发现n比较小,所以floyd跑一下,然后暴力判k个特殊点...这样就水过去?
比赛时KPM提醒了一下有重边...所以记得去重边,就加个min而已...
var n,m,q:longint;
i,j,k:longint;
x,y,z:longint;
c:array[..]of longint;
dist:array[..,..]of longint;
min:longint;
function mn(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end;
begin
read(n,m,q);
for i:= to q do
read(c[i]);
for i:= to n do
for j:= to n do
dist[i,j]:= << ;
for i:= to m do
begin
read(x,y,z);
dist[x,y]:=mn(dist[x,y],z);
dist[y,x]:=dist[x,y];
end;
for k:= to n do
for i:= to n do
for j:= to n do
if dist[i,k]+dist[k,j]<dist[i,j] then
dist[i,j]:=dist[i,k]+dist[k,j];
min:=maxlongint;
for i:= to q do
for j:= to q do
if (i<>j) then
if dist[c[i],c[j]]<min then min:=dist[c[i],c[j]];
writeln(min);
end.
C-1
C-2
发现n变大了...但是k很小,所以可以跑k次最短路
只会spfa...QAQ...
对于每个特殊点为s跑spfa,然后在暴力更新答案
n比较大所以记得要邻接表,邻接矩阵会炸...
然后边记得开两倍,因为是双向的...貌似挺多在这re了...
type
node=record
y,z:longint;
next:longint;
end;
var e:array[..]of node;
i,j:longint;
dist,first,c:array[..]of longint;
x,y,z:longint;
q:array[..]of longint;
v:array[..]of boolean;
tot:longint;
n,m,p:longint;
min:longint;
procedure adde(x,y,z:longint);
begin
e[tot].next:=first[x];
e[tot].y:=y;
e[tot].z:=z;
first[x]:=tot;
inc(tot);
end;
procedure spfa(s:longint);
var head,tail:longint;
i,now,y:longint;
begin
head:=;
tail:=;
for i:= to n do
begin
dist[i]:= << ;
v[i]:=false;
end;
q[]:=s;
v[s]:=true;
dist[s]:=;
while head<=tail do
begin
now:=q[head];
i:=first[now];
while i<>- do
begin
y:=e[i].y;
if dist[y]>dist[now]+e[i].z then
begin
dist[y]:=dist[now]+e[i].z;
if not v[y] then
begin
inc(tail);
q[tail]:=y;
v[y]:=true;
end;
end;
i:=e[i].next;
end;
inc(head);
v[now]:=false;
end;
end;
begin
read(n,m,p);
for i:= to p do
read(c[i]);
for i:= to n do
first[i]:=-;
for i:= to m do
begin
read(x,y,z);
adde(x,y,z);
adde(y,x,z)
end;
min:=maxlongint;
for i:= to p do
begin
spfa(c[i]);
for j:= to p do
if (i<>j)and(dist[c[j]]<min) then min:=dist[c[j]];
end;
writeln(min);
end.
C-2
C-3
还是搜刮题解没看懂...貌似是dijkstra...没学QAQ
bfs貌似也行...但是看不懂...
TJM的神奇分集合也不是很懂...
实在不会啊QAQ
先水这一点...然后去补题了...
Contest-hunter 暑假送温暖 SRM08的更多相关文章
- Contest-hunter 暑假送温暖 SRM01
一直找不到好的题去做...于是想到了srm...回来补题...QAQ 从srm01补起 A 题意:n个数,排成一列,刚开始都是1,如果左右相等就可以合并,问最后的数列长什么样. 思路:比赛的时候直接敲 ...
- bzoj4693: 雪中送温暖
Description 每年的1月10日是温暖节,在这一天,化身出题人的C_SUNSHINE将会给OIer们送温暖.OIer们只要在门口放上一个 仙人掌,就能在早上的某个时刻听到门外传来一声:“开门, ...
- Contest Hunter 3101
题目 Contest Hunter 3101 阶乘分解 原题传送门 题目分析 这里介绍一个本蒟蒻自己\(yy\)出来的方法. 我们发现,对于某一个单个的整数\(n\),若\(n\)能被某一个数\(x\ ...
- 【Contest Hunter【弱省胡策】Round #0-Flower Dance】组合数学+DP
题目链接: http://ch.ezoj.tk/contest/%E3%80%90%E5%BC%B1%E7%9C%81%E8%83%A1%E7%AD%96%E3%80%91Round%20%230/F ...
- [Contest Hunter#17-C] 舞动的夜晚
[题目链接] http://contest-hunter.org:83/contest/CH%20Round%20%2317/%E8%88%9E%E5%8A%A8%E7%9A%84%E5%A4%9C% ...
- Contest Hunter Round #70 - 连续两大交易事件杯省选模拟赛
orz lydrainbowcat [Problem A]「艦これ市」70万幕后交易事件 排序机器=-=.重要的是相同的处理. 我们可以从小到大添加数字,然后维护一个位置的序列.每一种相等的数字都在一 ...
- 某次送温暖考试的 c题
题目大意: 给定n个点的无根树,树上每个点都有一个非负的点权. 树上的路径的价值定义为树上路径的点权和-树上路径的点权最大值; 现在给定一个参数P询问有多少条路径的价值是P的倍数(注意单点也算路径,路 ...
- 【Contest Hunter 5302】金字塔
[原题链接]传送门 [题解思路] 1.考虑如何将序列与树相对应,想到类似dfs序和欧拉序,同一个子树对应序列连续 2.暴力分子树过于复杂,考虑简化(划重点: 若当前区间为[l,r],考虑第一颗子树所在 ...
- Contest Hunter 1401 兔子与兔子
1401 兔子与兔子 0x10「基本数据结构」例题 描述 很久很久以前,森林里住着一群兔子.有一天,兔子们想要研究自己的 DNA 序列.我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DN ...
随机推荐
- iOS-更新CocoaPods出现错误 提示重复文件
当多人开发的时候,或者引入了一些别人的第三方库文件的时候,当我们再更新CocoaPods时会出现错误,错误提示有一些文件 出现重复,这个时候我们需要查看一些是什么文件出现了重复,错误提示是xxxx三方 ...
- python 之 多进程
阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiprocessingpython中的多线程 ...
- JZOJ.5280【NOIP2017模拟8.15】膜法师
Description
- java导出简单写法
List<SaleOrderExportDTO> list = TransferUtil.transferList(queryList, SaleOrderExportDTO.class) ...
- Linux下修改Mysql的用(root的密码及修改root登录权限
修改的用户都以root为列. 一.知道原来的myql数据库的root密码: ①: 在终端命令行输入 mysqladmin -u root -p password "新密码" 回车 ...
- Refused to execute script from '....js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.md
目录 问题描述 解决过程 总结 问题描述 在整合 Spring Boot.Spring Security.Thymeleaf 的练习中,对页面进行调试时,发现如下错误提示: Refused to ex ...
- php 字母和数字验证码
//验证码 <?php //实现简单的验证码 //session_start session_start(); //画布 $image = imagecreatetruecolor(100, 3 ...
- php 正则表达式三.模式修正
1.贪婪模式和懒惰模式, 贪婪模式:php中正则默认是贪婪模式,匹配尽可能多 的字符,比如 $pattern='/a+b/'; $subject='aaaaaaaaab,那么可能会preg_match ...
- Python菜鸟之路:Django 路由补充1:FBV和CBV - 补充2:url默认参数
一.FBV和CBV 在Python菜鸟之路:Django 路由.模板.Model(ORM)一节中,已经介绍了几种路由的写法及对应关系,那种写法可以称之为FBV: function base view ...
- 基于Requests和BeautifulSoup实现“自动登录”
基于Requests和BeautifulSoup实现“自动登录”实例 自动登录抽屉新热榜 #!/usr/bin/env python # -*- coding:utf-8 -*- import req ...