01-07都没写...然后突然来写貌似有点突兀啊...不管了,难得前排记录一下...

吐槽一下赛制...不得不说很强... cf 套oi...很创新...不过还是兹磁ACM或者CF

A-1

数据才2<=n<=3 ...但是一眼过去就先打了个dfs 。

所以这个应该是A-2的题解。

a1应该打表就好了...

A-2

这个就是dfs啊...

搜索出所有的s串的子集,然后暴力判一下...

  1. var s:string;
  2. a:array[..]of string;
  3. i,j:longint;
  4. tot,x:longint;
  5. procedure dfs(dep,last:longint;t:string);
  6. var i:longint;
  7. begin
  8. if dep> then
  9. begin
  10. inc(tot);
  11. a[tot]:=t;
  12. end;
  13. for i:=last+ to length(s) do
  14. dfs(dep+,i,t+s[i]);
  15. end;
  16. begin
  17. readln(s);
  18. dfs(,,'');
  19. for i:= to tot do
  20. begin
  21. x:=;
  22. for j:= to tot do
  23. if (a[i]=a[j])and(length(a[i])=length(a[j])) then inc(x);
  24. if x= then
  25. begin
  26. writeln('Y');
  27. exit;
  28. end;
  29. end;
  30. writeln('N');
  31. 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!

  1. var
  2. c:array[''..'']of longint;
  3. s:ansistring;
  4. n,i:longint;
  5. begin
  6. readln(s);
  7. n:=length(s);
  8. for i:= to n do
  9. inc(c[s[i]]);
  10. if (c['']=)or(c['']=) then
  11. begin
  12. writeln('Y');
  13. exit;
  14. end;
  15. if n= then
  16. begin
  17. writeln('N');
  18. exit;
  19. end;
  20. if (s[]=s[])and(s[]<>s[]) then
  21. begin
  22. writeln('Y');
  23. exit;
  24. end;
  25. if (s[n]=s[n-])and(s[n]<>s[n-]) then
  26. begin
  27. writeln('Y');
  28. exit;
  29. end;
  30. for i:= to n- do
  31. if (s[i]=s[i-])and(s[i]<>s[i-])and(s[i]<>s[i+]) then
  32. begin
  33. writeln('Y');
  34. exit;
  35. end;
  36. writeln('N');
  37. end.

A-3

B-1

很明显用dfs水...

搜索出所有子序列,然后暴力判...

  1. var n,m:longint;
  2. a,b,c:array[..]of longint;
  3. ans:int64;
  4. i:longint;
  5. procedure dfs(dep,last:longint);
  6. var i,j:longint;
  7. x:boolean;
  8. begin
  9. if dep=m then
  10. begin
  11. x:=true;
  12. for j:= to m do
  13. if a[c[j]]+b[j]<a[c[j-]]+b[j-] then
  14. begin
  15. x:=false;
  16. break;
  17. end;
  18. if x then inc(ans);
  19. exit;
  20. end;
  21. for i:=last+ to n do
  22. begin
  23. c[dep+]:=i;
  24. dfs(dep+,i);
  25. end;
  26. end;
  27. begin
  28. read(n,m);
  29. for i:= to n do
  30. read(a[i]);
  31. for i:= to m do
  32. read(b[i]);
  33. dfs(,);
  34. writeln(ans);
  35. 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

  1. var
  2. n,m:longint;
  3. a,b:array[..]of longint;
  4. i,j,k:longint;
  5. f:array[..,..]of longint;
  6. ans:int64;
  7. begin
  8. read(n,m);
  9. for i:= to n do
  10. read(a[i]);
  11. for i:= to m do
  12. read(b[i]);
  13. for i:= to n do
  14. f[i,]:=;
  15. for i:= to n do
  16. begin
  17. for j:= to m do
  18. for k:= to i- do
  19. if a[i]+b[j]>=a[k]+b[j-] then
  20. f[i,j]:=(f[i,j]+f[k,j-]) mod ;
  21. end;
  22. for i:= to n do
  23. ans:=(ans+f[i,m]) mod ;
  24. writeln(ans);
  25. end.

B-2

B-3

到处搜刮题解QAQ...太笨不懂啊QAQ...

大概就是用个树状数组来优化...

具体优化不会QAQ...

貌似B-3数据没弄啊...悄悄咪咪去交个B-2

C-1

发现n比较小,所以floyd跑一下,然后暴力判k个特殊点...这样就水过去?

比赛时KPM提醒了一下有重边...所以记得去重边,就加个min而已...

  1. var n,m,q:longint;
  2. i,j,k:longint;
  3. x,y,z:longint;
  4. c:array[..]of longint;
  5. dist:array[..,..]of longint;
  6. min:longint;
  7. function mn(a,b:longint):longint;
  8. begin
  9. if a<b then exit(a) else exit(b);
  10. end;
  11. begin
  12. read(n,m,q);
  13. for i:= to q do
  14. read(c[i]);
  15. for i:= to n do
  16. for j:= to n do
  17. dist[i,j]:= << ;
  18. for i:= to m do
  19. begin
  20. read(x,y,z);
  21. dist[x,y]:=mn(dist[x,y],z);
  22. dist[y,x]:=dist[x,y];
  23. end;
  24. for k:= to n do
  25. for i:= to n do
  26. for j:= to n do
  27. if dist[i,k]+dist[k,j]<dist[i,j] then
  28. dist[i,j]:=dist[i,k]+dist[k,j];
  29. min:=maxlongint;
  30. for i:= to q do
  31. for j:= to q do
  32. if (i<>j) then
  33. if dist[c[i],c[j]]<min then min:=dist[c[i],c[j]];
  34. writeln(min);
  35. end.

C-1

C-2

发现n变大了...但是k很小,所以可以跑k次最短路

只会spfa...QAQ...

对于每个特殊点为s跑spfa,然后在暴力更新答案

n比较大所以记得要邻接表,邻接矩阵会炸...

然后边记得开两倍,因为是双向的...貌似挺多在这re了...

  1. type
  2. node=record
  3. y,z:longint;
  4. next:longint;
  5. end;
  6. var e:array[..]of node;
  7. i,j:longint;
  8. dist,first,c:array[..]of longint;
  9. x,y,z:longint;
  10. q:array[..]of longint;
  11. v:array[..]of boolean;
  12. tot:longint;
  13. n,m,p:longint;
  14. min:longint;
  15. procedure adde(x,y,z:longint);
  16. begin
  17. e[tot].next:=first[x];
  18. e[tot].y:=y;
  19. e[tot].z:=z;
  20. first[x]:=tot;
  21. inc(tot);
  22. end;
  23. procedure spfa(s:longint);
  24. var head,tail:longint;
  25. i,now,y:longint;
  26. begin
  27. head:=;
  28. tail:=;
  29. for i:= to n do
  30. begin
  31. dist[i]:= << ;
  32. v[i]:=false;
  33. end;
  34. q[]:=s;
  35. v[s]:=true;
  36. dist[s]:=;
  37. while head<=tail do
  38. begin
  39. now:=q[head];
  40. i:=first[now];
  41. while i<>- do
  42. begin
  43. y:=e[i].y;
  44. if dist[y]>dist[now]+e[i].z then
  45. begin
  46. dist[y]:=dist[now]+e[i].z;
  47. if not v[y] then
  48. begin
  49. inc(tail);
  50. q[tail]:=y;
  51. v[y]:=true;
  52. end;
  53. end;
  54. i:=e[i].next;
  55. end;
  56. inc(head);
  57. v[now]:=false;
  58. end;
  59. end;
  60. begin
  61. read(n,m,p);
  62. for i:= to p do
  63. read(c[i]);
  64. for i:= to n do
  65. first[i]:=-;
  66. for i:= to m do
  67. begin
  68. read(x,y,z);
  69. adde(x,y,z);
  70. adde(y,x,z)
  71. end;
  72. min:=maxlongint;
  73. for i:= to p do
  74. begin
  75. spfa(c[i]);
  76. for j:= to p do
  77. if (i<>j)and(dist[c[j]]<min) then min:=dist[c[j]];
  78. end;
  79. writeln(min);
  80. 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. 将BT转为磁力链接

    实战代码 安装完成后,我们来看下代码: 系统环境:Linux Python环境:Python2.7 请注意python版本 bt2url.py 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  2. 【BZOJ2259】[Oibh]新型计算机 最短路

    [BZOJ2259][Oibh]新型计算机 Description Tim正在摆弄着他设计的“计算机”,他认为这台计算机原理很独特,因此利用它可以解决许多难题. 但是,有一个难题他却解决不了,是这台计 ...

  3. 【BZOJ3522】[Poi2014]Hotel 树形DP

    [BZOJ3522][Poi2014]Hotel Description 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房 ...

  4. Shell正则表达式和文本处理工具

    作业一:整理正则表达式博客 一.什么是正则 正则就是用一些具有特殊含义的符号组合而成(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 通配符是由shell解释得. ...

  5. 面试题15:链表中倒数第K个结点

    输入一个链表,输出该链表中倒数第k个结点. 方法1: 这个解法要循环两次链表 /* public class ListNode { int val; ListNode next = null; Lis ...

  6. java 内存空间

    堆:new 出的对象在堆上 java栈:java程序.线程运行数据.内存数据 每个方法都有自己的栈.运行时需要的数据存在自己的栈中 每个线程对立的是图中浅蓝色的部分(java栈.本地方法栈.程序计数器 ...

  7. 对比MySQL,你究竟在什么时候更需要MongoDB(转)

    译文:对比MySQL,你究竟在什么时候更需要MongoDB 原文链接: When Should I Use MongoDB rather than MySQL (or other RDBMS): Th ...

  8. 《深入理解Linux网络技术内幕》阅读笔记 --- 邻居子系统

    1.封包从L3至L2的传送过程如下所示: 本地主机的路由子系统选择L3目的地址(下一个跃点). 根据路由表,如果下一个跃点在同一个网络中,邻居层就把目的L3地址解析为跃点的L2地址.这个关联会被放入缓 ...

  9. hadoop namenode

    存储文件系统元数据,例如:文件目录结构,不同文件的分块情况,每块存储在那个节点,权限等 这些元数据全部存储在内存中,所以,namenode要求内存比较大 hdfs在存文件的时候会按照块存储,每一块默认 ...

  10. 转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)

    http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常 ...