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 ...
随机推荐
- 将BT转为磁力链接
实战代码 安装完成后,我们来看下代码: 系统环境:Linux Python环境:Python2.7 请注意python版本 bt2url.py 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- 【BZOJ2259】[Oibh]新型计算机 最短路
[BZOJ2259][Oibh]新型计算机 Description Tim正在摆弄着他设计的“计算机”,他认为这台计算机原理很独特,因此利用它可以解决许多难题. 但是,有一个难题他却解决不了,是这台计 ...
- 【BZOJ3522】[Poi2014]Hotel 树形DP
[BZOJ3522][Poi2014]Hotel Description 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房 ...
- Shell正则表达式和文本处理工具
作业一:整理正则表达式博客 一.什么是正则 正则就是用一些具有特殊含义的符号组合而成(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 通配符是由shell解释得. ...
- 面试题15:链表中倒数第K个结点
输入一个链表,输出该链表中倒数第k个结点. 方法1: 这个解法要循环两次链表 /* public class ListNode { int val; ListNode next = null; Lis ...
- java 内存空间
堆:new 出的对象在堆上 java栈:java程序.线程运行数据.内存数据 每个方法都有自己的栈.运行时需要的数据存在自己的栈中 每个线程对立的是图中浅蓝色的部分(java栈.本地方法栈.程序计数器 ...
- 对比MySQL,你究竟在什么时候更需要MongoDB(转)
译文:对比MySQL,你究竟在什么时候更需要MongoDB 原文链接: When Should I Use MongoDB rather than MySQL (or other RDBMS): Th ...
- 《深入理解Linux网络技术内幕》阅读笔记 --- 邻居子系统
1.封包从L3至L2的传送过程如下所示: 本地主机的路由子系统选择L3目的地址(下一个跃点). 根据路由表,如果下一个跃点在同一个网络中,邻居层就把目的L3地址解析为跃点的L2地址.这个关联会被放入缓 ...
- hadoop namenode
存储文件系统元数据,例如:文件目录结构,不同文件的分块情况,每块存储在那个节点,权限等 这些元数据全部存储在内存中,所以,namenode要求内存比较大 hdfs在存文件的时候会按照块存储,每一块默认 ...
- 转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)
http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常 ...