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. jQuery中如何给动态添加的元素绑定事件

    jquery中绑定事件一般使用bind,或者click,但是这只能是对已经加载好的元素定义事件,那些后来添加插入的元素则需要另行绑定.在1.7版本以前使用live.但是在1.8版本以后推荐使用on.这 ...

  2. CF678D(Iterated Linear Function)

    题目链接:传送门 题目大意:略 题目思路:用题目所给函数推出表达式,然后用等比求和公式得到关系式套用即可(需用乘法逆元),也可直接构造矩阵,用矩阵快速幂求解. 感受:做题时一定要仔细,需要仔细注意什么 ...

  3. 记录--jquery 获取父级、子级、兄弟元素 + 实例

    需求如下: 三条数据,需点击其中一条数据在其下面展示与此数据关联的图片.主要功能可能是在点击的数据下增加显示行 思路: 把需要点击增加的数据先隐藏.点击后再将其显示出来. 知识点: jQuery.pa ...

  4. 如何看懂ORACLE执行计划

    如何看懂Oracle执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when a ...

  5. JS eval()函数

    js  eval()函数   这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它.   举个小例子:    //执行表达式  var the_unevaled_answer = & ...

  6. Java方法区和永久代

    Java方法区和永久代 目前有三大Java虚拟机:HotSpot,oracle JRockit,IBM J9. JRockit是oracle发明的,用于其WebLogic服务器,IBM JVM是IBM ...

  7. Django--Web应用介绍/http协议

  8. Leetcode注意

    List<List<Integer>> res = new ArrayList<>();

  9. QT解析嵌套JSON表达式

    QT5开发环境集成了解析JSON表达式的库.使用很方便. 友情提示一下,好像在QT4环境里.须要到官网下载相关的库文件才干使用解析功能.话不多说,上代码 1.在pro文件里增加 QT += scrip ...

  10. django安装与卸载

    安装 D:\Django-1.8.2>python setup.py installrunning install Installed d:\python27\lib\site-packages ...