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的更多相关文章

  1. Contest-hunter 暑假送温暖 SRM01

    一直找不到好的题去做...于是想到了srm...回来补题...QAQ 从srm01补起 A 题意:n个数,排成一列,刚开始都是1,如果左右相等就可以合并,问最后的数列长什么样. 思路:比赛的时候直接敲 ...

  2. bzoj4693: 雪中送温暖

    Description 每年的1月10日是温暖节,在这一天,化身出题人的C_SUNSHINE将会给OIer们送温暖.OIer们只要在门口放上一个 仙人掌,就能在早上的某个时刻听到门外传来一声:“开门, ...

  3. Contest Hunter 3101

    题目 Contest Hunter 3101 阶乘分解 原题传送门 题目分析 这里介绍一个本蒟蒻自己\(yy\)出来的方法. 我们发现,对于某一个单个的整数\(n\),若\(n\)能被某一个数\(x\ ...

  4. 【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 ...

  5. [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% ...

  6. Contest Hunter Round #70 - 连续两大交易事件杯省选模拟赛

    orz lydrainbowcat [Problem A]「艦これ市」70万幕后交易事件 排序机器=-=.重要的是相同的处理. 我们可以从小到大添加数字,然后维护一个位置的序列.每一种相等的数字都在一 ...

  7. 某次送温暖考试的 c题

    题目大意: 给定n个点的无根树,树上每个点都有一个非负的点权. 树上的路径的价值定义为树上路径的点权和-树上路径的点权最大值; 现在给定一个参数P询问有多少条路径的价值是P的倍数(注意单点也算路径,路 ...

  8. 【Contest Hunter 5302】金字塔

    [原题链接]传送门 [题解思路] 1.考虑如何将序列与树相对应,想到类似dfs序和欧拉序,同一个子树对应序列连续 2.暴力分子树过于复杂,考虑简化(划重点: 若当前区间为[l,r],考虑第一颗子树所在 ...

  9. Contest Hunter 1401 兔子与兔子

    1401 兔子与兔子 0x10「基本数据结构」例题 描述 很久很久以前,森林里住着一群兔子.有一天,兔子们想要研究自己的 DNA 序列.我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DN ...

随机推荐

  1. AndroidManifest.xml文件详解(activity)(四)

    android:multiprocess 这个属性用于设置Activity的实例能否被加载到与启动它的那个组件所在的进程中,如果设置为true,则可以,否则不可以.默认值是false. 通常,一个新的 ...

  2. JZOJ.5286【NOIP2017模拟8.16】花花的森林

    Description

  3. angualar入门学习-- 自定义指令 认识属性

    个AngularJS指令在HTML代码中可以有四种表现形式: 1.作为一个新的HTML元素来使用 2.作为一个元素的属性来使用 3.作为一个元素的类来使用 4.作为注释来使用 一.创建指令 angul ...

  4. 【VUE】VUE相关学习和知识备份

    一.学习资料参考 1.1.Vue.js 官网:Vue.js https://cn.vuejs.org/ 官方文档:介绍 - Vue.js https://cn.vuejs.org/v2/guide/ ...

  5. jquery ajax 传数据到后台乱码的处理方法

    前台页面先对中文进行编码,如下红色字体: function saveCommentTemplate() { $.ajax({ cache : false, type:'get', dataType:' ...

  6. Grammar Rules

    Grammar Rules Here are 20 simple rules and tips to help you avoid mistakes in English grammar. For m ...

  7. 被Chrome下的remove闪了一下腰

    有用户反映说购物车删除不了东西,于是有了下面的测试. 浏览器:ie7 ie8 ie9 chrome 代码: <a href="javascript:" onclick=&qu ...

  8. mysql 中用户默认密码加密问题

    问题描述: 在mysql中 user表中新增用户默认密码为123456,但是在数据库中显示不能为明文,而mysql的默认字段不能用函数 解决方法: 用触发器 delimiter | drop trig ...

  9. Howto: Performance Benchmarks a Webserver

    Howto: Performance Benchmarks a Webserver last updated June 9, 2006 in CategoriesApache, FreeBSD, Ho ...

  10. FatMouse's Speed---hdu1160(简单dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 题意就是给你一些老鼠(编号1,2,3,4,5,6,7,8...)的体重和他们的速度然后求出最大的 ...