我虽然没有参加GDKOI2015,但是我找了2015年的题练了一下。

题意如下:

思路:最大流,因为有多组数据,每次读入一组数据都要清零。

a. 将每个点拆分成两个点,例如样例G→G`,再将字母一一编号,G=1,G`=2,D=3,D`=4……(公式:(x-1)*2*m+y*2{第x行,第y列}),将G与G`,D与D`等相连一条边,流量与cnt对应。

如图,如果w=GD,S为原点,F为汇点,构图如图。

b. 再向8个方向搜索是否有下一个字母,如有将它们之间连一条边,流量为无限。

c. 定原点为0,原点与第一个字母连一条边,流量为无限,定汇点n*m*2+1,最后一个字母与汇点相连一条边,流量为无限。

d. 建图完成之后,进行最大流计算。

代码如下:

program wordcount;
const x1:array[1..8] of longint=(-1,-1,-1,0,1,1,1,0);
y1:array[1..8] of longint=(-1,0,1,1,1,0,-1,-1);
var n,m,x,y,i,j,k,ans,z,nn,t,c,l,h,h2,head,tail:longint;
var s:ansistring;
var mat:array[1..510,1..510] of char;
var q:array[0..10000] of longint;
var flow:array[0..510,0..510] of longint;
var dis:array[0..510] of longint;
function hh(i,j:longint):longint;//公式函数
begin
exit((i-1)*2*m+j*2);
end;
function dfs(x,xx:longint):longint;//求最小流,增广之后得到最大流
var i,k:longint;
begin
if x=nn then exit(xx);
for i:=0 to nn do
if (flow[x,i]>0) and (dis[i]=dis[x]+1) then
begin
if flow[x,i]>xx then k:=dfs(i,xx) else k:=dfs(i,flow[x,i]);
dec(flow[x,i],k);inc(flow[i,x],k);
if k>0 then exit(k);
end;
exit(0);
end;
procedure bfs;//求dis(层)
var i,now:longint;
begin
fillchar(dis,sizeof(dis),0);
fillchar(q,sizeof(q),0);
dis[0]:=1;head:=1;tail:=1;q[1]:=0;
repeat
now:=q[head];
for i:=0 to nn do
if (flow[now,i]>0) and (dis[i]=0) then
begin
dis[i]:=dis[now]+1;
inc(tail);
q[tail]:=i;
end;
inc(head);
until head>tail;
end;//以上为最大流计算(d步)
begin
read(t);
for k:=1 to t do
begin
fillchar(q,sizeof(q),0);
fillchar(flow,sizeof(flow),0);
fillchar(dis,sizeof(dis),0);
for i:=1 to 210 do
for j:=1 to 210 do mat[i,j]:=chr(0);//以上为初始化
readln(n,m);nn:=n*m*2+1;
for i:=1 to n do
begin
readln(s);
for j:=1 to m do mat[i,j]:=s[j];
end;
for i:=1 to n do
for j:=1 to m do
begin
read(c);
flow[hh(i,j)-1,hh(i,j)]:=c;//连边
end;
readln;
readln(s);//以上为读入
for i:=1 to n do
for j:=1 to m do
begin
if mat[i,j]=s[1] then flow[0,hh(i,j)-1]:=maxlongint;//c步
if mat[i,j]=s[length(s)] then flow[hh(i,j),nn]:=maxlongint;//c步
h2:=pos(mat[i,j],s);
for l:=1 to 8 do //向8个方向搜索
begin
if (mat[i+x1[l],j+y1[l]]=s[h2+1]) then
flow[hh(i,j),hh(i+x1[l],j+y1[l])-1]:=maxlongint;
if (mat[i+x1[l],j+y1[l]]=s[h2-1]) then
flow[hh(i+x1[l],j+y1[l]),hh(i,j)-1]:=maxlongint;
end;
end;
ans:=0;
while 1=1 do
begin
bfs;
if dis[nn]=0 then break;
repeat
z:=dfs(0,maxlongint);
inc(ans,z);
until z>0;
end;
writeln('Case #',k,': ',ans);//注意输出格式
end;
end.

  

谢谢阅读!

因为此程序没有经过官方测评,只跟正解程序对拍了一下,可能会有些错,请在评论区告诉我。

另外,很抱歉,我不会打C++代码,请大家谅解。

GDKOI 2015 Day1 T2 单词统计Pascal的更多相关文章

  1. codevs 4511 信息传递(NOIP2015 day1 T2)

    4511 信息传递 NOIP2015 day1 T2 时间限制: 1 s 空间限制: 128000 KB 传送门 题目描述 Description 有个同学(编号为 1 到)正在玩一个信息传递的游戏. ...

  2. 【NOIP2016 Day1 T2】天天爱跑步

    题目传送门:https://www.luogu.org/problemnew/show/P1600 感觉这两天在处理边界问题上有点神志不清......为了从80的暴力变成100,花了整整一个下午+一个 ...

  3. [NOIP2016 DAY1 T2]天天爱跑步-[差分+线段树合并][解题报告]

    [NOIP2016 DAY1 T2]天天爱跑步 题面: B[NOIP2016 DAY1]天天爱跑步 时间限制 : - MS 空间限制 : 565536 KB 评测说明 : 2s Description ...

  4. MapReduce 单词统计案例编程

    MapReduce 单词统计案例编程 一.在Linux环境安装Eclipse软件 1.   解压tar包 下载安装包eclipse-jee-kepler-SR1-linux-gtk-x86_64.ta ...

  5. ytu 2002:C语言实验——单词统计(水题)

    C语言实验——单词统计 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 61  Solved: 34[Submit][Status][Web Board] ...

  6. 2、 Spark Streaming方式从socket中获取数据进行简单单词统计

    Spark 1.5.2 Spark Streaming 学习笔记和编程练习 Overview 概述 Spark Streaming is an extension of the core Spark ...

  7. hive学习之WordCount单词统计

    看hive目录下就可以了,程序在hdfs里创建一个hive的大文件夹,相当于数据库吧.上面就是一个完整的利用hive来做单词统计,其中的优劣也能看出一点.

  8. scala基本语法和单词统计

    scala 基本语法 1.声明变量 (1)val i = 1 使用val声明的变量值是不可变的,相当于java里final修饰的变量,推荐使用. (2)var i = "hello" ...

  9. 3728 联合权值[NOIP 2014 Day1 T2]

    来源:NOIP2014 Day1 T2 OJ链接: http://codevs.cn/problem/3728/ https://www.luogu.org/problemnew/show/P1351 ...

随机推荐

  1. Keil中使用宏编译来定义DEBUG输出

    使用宏编译来格式化调试信息,是一个不错的方法,即可以在需要的时候打印出信息,还可以格式化我们所需要的输出. #define DEBUG 1 #if (DEBUG == 1) #define DBG(A ...

  2. datagridcolumn单元格怎么显示查询到的某个表的字段值(字段值可能为多个)

    例如,在之前做的项目中,查询mhz_xckcr表,select出某个业务的现场勘察人信息,select出的现场勘察人姓名(可能有多个)要在前台datagrid的一个datagridcolmn单元格显示 ...

  3. 怎样使用万用表来测试板子上的TX和RX引脚

    最近在看openwrt时看到的一个方法,直接看下面写的: 文章来自:http://wiki.openwrt.org/doc/hardware/port.serial 经实际测试时发现,将万用表的负表笔 ...

  4. Singal Page App:使用Knockout和RequireJS创建高度模块化的单页应用引擎

    Singal Page App 开篇扯淡 距离上一篇文章已经有好几个月,也不是没有时间记录点东西,主要是换了新的工作,在一家外资工作,目前的工作内容大多都是前端开发,新接触的东西因为时间原因,大多还不 ...

  5. android 使用 service 实现音乐

    今天的球员趁service.播放音乐service结束,进度条activity结束,因此,基础工作activity和service互动,本文将使用IBinder互动.主要activity能够调用ser ...

  6. CSS3中文手册基础知识

    CSS3手册是学习CSS3的最佳文档,不管是自己写博客,还是买书,手册少不了.今天我给大家介绍一些CSS3有哪些分类及其使用. 具体参考:http://caibaojian.com/css3/ 上来进 ...

  7. ASP.NET MVC项目里创建一个aspx视图

    先从控制器里添加视图 视图引擎选"ASPX(C#)",使用布局或模板页不要选. 在Views\EAV目录里,生成的aspx是个单独的页面,没有代码文件,所以代码也要写在这个文件里. ...

  8. [转]SQL2005后的ROW_NUMBER()函数的应用

    SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单 分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系 ...

  9. 一个ASP.NET Web API 2.0应用

    在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.N ...

  10. JS图片自动或者手动滚动效果(支持left或者up)

    JS图片自动或者手动滚动效果(支持left或者up) JS图片自动或者手动滚动效果 在谈组件之前 来谈谈今天遇到搞笑的事情,今天上午接到一个杭州电话 0571-28001187 即说是杭州人民法院的 ...