时间限制: 1 s
 空间限制: 256000 KB
 题目等级 : 黄金 Gold
 
题目描述 Description

众所周知,LOL这款伟大的游戏,有个叫盖伦的英雄。他的伟大之处在于他特别喜欢蹲草丛阴人(XL:蹲草阴人也算英雄?!CZQ:没办法,个个都是这么玩的)。某日,德玛西亚与诺克萨斯之间又发生了一场战斗,嘉文四世希望盖伦能带领一支K人的德玛西亚军队出战。

战斗发生在召唤师峡谷。整个召唤师峡谷被分割成M行N列的一个矩阵,矩阵中有空地和几片草丛。这几片草丛中有些很大、有些很小。一个1×1的草丛能容纳3个士兵,盖伦坚信蹲草偷袭战术能战胜诺克萨斯军队,所以他希望他的军队能全部蹲进草丛里。当然,为了不影响盖伦的作战,盖伦需要单独霸占连起来的一片草丛(不管草丛有多大)。

输入描述 Input Description

第一行M、N、K,表示矩阵的行数、列数和士兵数量。
接下来M行,输入矩阵,'.'代表平地,'*'代表草丛。

输出描述 Output Description

如果德玛西亚军队和盖伦都能躲进草丛里,则输出“Demacia Win!”,否则输出“Demacia Lose!”

样例输入 Sample Input

3 3 6
.**
...
.*.

样例输出 Sample Output

Demacia Win!

数据范围及提示 Data Size & Hint

1<=m、n<=1500
1<=k<=1500
P.S:这里对于两个1×1的草丛是否连在一起的定义是:对于每个1×1的草从,它与周围(上下左右)的草丛是连在一起的。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int m,n,k;
int a[+][+];
int dis[];
int s[];
int head=,tail=;
int x[+],y[+],qian[+];
int x0[]={,,,,-},y0[]={,,-,,};
int p=;
bool f=false;
void init()
{
scanf("%d%d%d",&m,&n,&k);
getchar();
for(int i=;i<=m;i++)
{
for(int j=;j<=n;j++)
{
char c;
scanf("%c",&c);
if(c=='.') a[i][j]=;
else a[i][j]=;
}
getchar();
}
}
void ss()
{
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
if(a[i][j]==)
{
p++;
memset(x,,sizeof(x));
memset(y,,sizeof(y));
memset(qian,,sizeof(qian));
head=;
tail=;
qian[]=;
x[]=i;
y[]=j;
a[i][j]=;
dis[p]++;
while(head!=tail)
{
head++;
for(int k=;k<=;k++)
{
int xx=x[head]+x0[k],yy=y[head]+y0[k];
if(a[xx][yy]==)
{
tail++;
x[tail]=xx;
y[tail]=yy;
qian[tail]=head;
a[xx][yy]=;
dis[p]++;
}
}
}
}
}
void sss()
{
sort(dis+,dis+p+);
int q=;
for(int i=;i<=p;i++)
q+=dis[i];
if(*q>=k)
{
f=true;
return;
}
}
int main()
{
init();
ss();
// for(int i=1;i<=p;i++) printf("%d ",dis[i]);
sss();
if(f==true) printf("Demacia Win!\n");
else printf("Demacia Lose!\n");
return ;
}
 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
题目描述 Description

在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步,黑白双方交替走棋,任意一方可以先走,如果某个时刻使得任意一种颜色的棋子形成四个一线(包括斜线),这样的状态为目标棋局。

 
 
输入描述 Input Description
从文件中读入一个4*4的初始棋局,黑棋子用B表示,白棋子用W表示,空格地带用O表示。
输出描述 Output Description

用最少的步数移动到目标棋局的步数。

样例输入 Sample Input

BWBO
WBWB
BWBW
WBWO

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

hi

#include <iostream>
#include <algorithm>
#include<cstdio> using namespace std; const int dx[]={,,,-},dy[]={,,-,};
int a[][],minn=; void dfs(int x,int y,int num,int yes)
{
int m=;
if(num>=minn) return;
for(int i=;i<=;i++)
{
if (a[i][]==a[i][]&&a[i][]==a[i][]&&a[i][]==a[i][]&&(a[i][]==||a[i][]==))
m=num;
if (a[][i]==a[][i]&&a[][i]==a[][i]&&a[][i]==a[][i]&&(a[][i]==||a[][i]==))
m=num;
}
if (a[][]==a[][]&&a[][]==a[][]&&a[][]==a[][]&&(a[][]==||a[][]==))
m=num;
if (a[][]==a[][]&&a[][]==a[][]&&a[][]==a[][]&&(a[][]==||a[][]==))
m=num;
if (m<minn)
{
minn=m;
return;
}
for(int i=;i>=;i--)
{
int xx=x+dx[i],yy=dy[i]+y;
if(xx>&&xx<&&yy>&&yy<&&yes==a[xx][yy])
{
a[x][y]=a[xx][yy];
a[xx][yy]=;
if(yes==) yes=;
else yes=;
for(int j=;j<=;j++)
for(int k=;k<=;k++)
if(!a[j][k]) dfs(j,k,num+,yes);
if(yes==) yes=;
else yes=;
a[xx][yy]=a[x][y];
a[x][y]=;
}
}
} int main()
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
char tmp;
cin>>tmp;
if (tmp=='W') a[i][j]=;
else if (tmp=='B') a[i][j]=;
}
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(!a[i][j])
{
dfs(i,j,,);
dfs(i,j,,);
}
printf("%d",minn);
return ;
}
 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
题目描述 Description

计算乘法时,我们可以添加括号,来改变相乘的顺序,比如计算X1, X2, X3, X4, …, XN的积,可以

(X1(X2(X3(X4(...(XN-1*XN)...)))))

:::

:::

(((...(((X1*X2)X3)X4)...)XN-1)XN)

你的任务是编程求出所有这样的添括号的方案。

输入描述 Input Description

输入文件第一行是一个数n(1<=n<=10),表示有n个变量,之后N行每行一个变量的名字。

输出描述 Output Description

输出所有的添加括号的方案。注意:单个字符不要加括号,两个字符相乘中间要有乘号。

样例输入 Sample Input

4

North

South

East

West

样例输出 Sample Output

(North(South(East*West)))

(North((South*East)West))

((North*South)(East*West))

((North(South*East))West)

(((North*South)East)West)

#include <iostream>
#include <string>
#include <vector> using namespace std; vector<string> ans[][];
string str[];
int n; void dfs(int l,int r)
{
if (ans[l][r].size())
{
return;
}
if (l==r)
{
ans[l][l].push_back(str[l]);
}
else
{
for(int i=l;i<r;i++)
{
dfs(l,i);
dfs(i+,r);
int sl=ans[l][i].size(),
sr=ans[i+][r].size();
for(int j=;j<sl;j++)
{
for(int k=;k<sr;k++)
{
string s;
s="("+ans[l][i][j];
if(r-l==)
{
s+="*";
}
s+=(ans[i+][r][k]+")");
ans[l][r].push_back(s);
}
}
}
}
} int main(int argc, char** argv)
{
cin>>n;
for(int i=;i<=n;i++)
{
cin>>str[i];
}
dfs(,n);
int m=ans[][n].size();
for(int i=;i<m;i++)
{
cout<<ans[][n][i] << endl;
}
return ;
}
 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
题目描述 Description

Abstinence(戒酒)岛的居民们酷爱一种无酒精啤酒。以前这种啤酒都是从波兰进口,但今年居民们想建一个自己的啤酒厂。岛上所有的城市都坐落在海边,并且由一条沿海岸线的环岛高速路连接。酒厂的投资者收集了关于啤酒需求量的信息,即每天各城市消费的啤酒桶数。另外还知道相邻城市之间的距离。每桶啤酒每英里的运费是1元。日运费是将所需要的啤酒从酒厂运到所有城市所必需的运费之和。日运费的多少和酒厂的选址有关。投资者想找到一个合适的城市来修建酒厂,以使得日运费最小。

请设计一个程序:从文件bre.in 读入城市的数目、相邻两城市间的距离以及每个城市消费的啤酒桶数,计算最小的日运费,将结果写到输出文件bre.out中。

输入描述 Input Description

第一行是一个整数n(5 <= n <= 10000) ,表示城市的数目。 城市沿高速路编号,使得相邻的城市的编号也相邻(城市1和n也被认为是相邻)。 以下的n行,每行有两个非负整数。第I+1行的数 zi、di分别是城市I每日的啤酒消费量(桶)和从城市I沿高速路到下一个城市的距离(英里)。高速路的总长不会超过65535 英里。每座城市的日消费量不会超过255桶。

输出描述 Output Description

一个整数,表示所需的最小日运费(元)。

样例输入 Sample Input

6

1 2

2 3

1 2

5 2

1 10

2 3

样例输出 Sample Output

41

#include<cstdio>
#include<iostream> #define M 20010
#define INF 9223372036854775807LL using namespace std; int a[M],b[M],n;
long long c[M];
int sum=; int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&a[i],&b[i]);
for(int i=;i<=n;i++)
{
a[i+n]=a[i];
b[i+n]=b[i];
}
for(int i=;i<=n;i++)
sum+=b[i];
for(int i=;i<=n;i++)
{
int t=;
for(int j=i-+n;j>=i+;j--)
{
t+=b[j];
c[i]+=min(t,sum-t)*a[j];
}
}
long long m=INF;
for(int i=;i<=n;i++)
m=min(m,c[i]);
cout<<m;
return ;
}
 时间限制: 1 s
 空间限制: 16000 KB
 题目等级 : 黄金 Gold
 
题目描述 Description

某同学考试,在N*M的答题卡上写了A,B,C,D四种答案。

他做完了,又不能交,一看表,离打铃还有N久。

他开始玩一个游戏:选一个格子X,Y,从这个格子出发向4个方向找相同的选项,找到的再如此。

求形成的图形的面积。(一个选项占一个单位面积)

输入描述 Input Description

N M X  Y

答题卡(矩阵)

输出描述 Output Description

面积

样例输入 Sample Input

3 3 1 2

A C B

C C C

D C A

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

N,M<=15.

对于33%数据,只有A。

#include<cstdio>
#include<iostream>
#include<cstring> using namespace std; int n,m,x,y;
int a[][];
int ans;
int dx[]={,,,,-};
int dy[]={,,-,,}; void dfs(int x,int y,int k)
{
ans++;
for(int i=;i<=;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(a[xx][yy]==k)
{
a[xx][yy]=;
dfs(xx,yy,k);
}
}
} int main()
{
scanf("%d%d%d%d",&n,&m,&x,&y);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
char c;
cin>>c;
switch(c)
{
case 'A':a[i][j]=;break;
case 'B':a[i][j]=;break;
case 'C':a[i][j]=;break;
case 'D':a[i][j]=;break;
}
}
int p=a[x][y];
a[x][y]=;
dfs(x,y,p);
printf("%d",ans);
return ;
}
 时间限制: 1 s
 空间限制: 8000 KB
 题目等级 : 黄金 Gold
 
题目描述 Description

从1900年1月1日(星期一)开始经过的n年当中,每个月的13号这一天是星期一、星期二、星期三、......、星期日的次数分别是多少?

输入描述 Input Description

一行,一个整数(1<=n<=400)

输出描述 Output Description

一行7个整数,以空格相隔,(依次是星期一、星期二、星期三、......星期日的次数)

样例输入 Sample Input

1

样例输出 Sample Output

1  3  1  2  2  2  1

数据范围及提示 Data Size & Hint

1<=n<=500

#include<cstdio>

int n;
int year;
int a[]; int main()
{
scanf("%d",&year);
for(int i=;i<+year;i++)
for(int j=;j<=;j++)
{
a[(n+)%]+=;
switch(j)
{
case :
case :
case :
case :
case :
case :
case :n+=;break;
case :
if((i%!= && i%==)||(i%== && i%==)) n+=;
else n+=;
break;
default:n+=;break;
}
}
for(int i=;i<;i++)
printf("%d ",a[i]);
printf("%d",a[]);
return ;
}
 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
题目描述 Description

9月12日是小松的朋友小寒的生日。小松知道小寒特别喜欢蝴蝶,所以决定折蝴蝶作为给小寒的生日礼物。他来到了PK大学最大的一家地下超市,在超市里,小松找到了n种可以用来折纸的本子。每种类型的本子里有若干不同颜色的纸若干张,当然同种类型的本子一定是完全一样的,而不同种类型的本子不一定完全不一样。他统计了一下,这里总共有n种不同类型的可以用来折纸的本子,每种本子各有bi本,所有的纸中有m种颜色是小寒所喜欢的颜色。小松希望他折的每种颜色的蝴蝶的数目是一样的。换句话说,小松必须折m*k只蝴蝶,其中k代表每种颜色蝴蝶的数目,这个数由小松自己来决定。但是小松又不能浪费纸,也就是说他买的本子中,只要是小寒喜欢的颜色的纸都要被折成蝴蝶。于是问题来了,每种类型的本子应该各买多少本,才能折出这m*k只蝴蝶呢?当然,由于小松是个很懒的人,他希望折的蝴蝶数目越少越好,只要表达了心意就可以了(也就是不能1只也不折)。而如果小松总共必须折1000只以上的蝴蝶才能满足要求,那么他就宁愿换一种礼物的方案了。

输入描述 Input Description

输入的第一行包含2个整数n(1≤n8),m(1≤m10)。表示有n种不同类型的本子和m种小寒喜欢的颜色。接下来一个n*m的矩阵。第i行第j列的整数aij表示在第i种类型的本子中包含小寒喜欢的颜色j的纸有aij(1≤aij100)张。再接下来的一排n个整数b1bn,表示每种颜色的本子在超市中有多少本(1≤bi5)。

输出描述 Output Description

输出包含一个整数,表示小松最少需要折的蝴蝶数目,如果该数目超过1000,则输出”alternative!”。(由于可能存在多种买本子的方案,所以这里就不要求输出具体方案了)

样例输入 Sample Input

2 3

2 1 2

4 8 4

5 5

样例输出 Sample Output

36

数据范围及提示 Data Size & Hint

#include<cstdio>
#include<iostream>
#include<cstring> using namespace std; int n,m,a[][],b[];
int mon[],ans=; void init();
void work(int); int main()
{
init();
work();
if(ans>)
{
printf("alternative!");
return ;
}
else
printf("%d",ans);
return ;
} void init()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&a[i][j]);
for(int i=;i<=n;i++)
scanf("%d",&b[i]);
} void work(int k)
{
if(k>n)
return;
int pp=;
for(int i=;i<=m;i++)
if(mon[i]>pp)
pp=mon[i];
if(pp*m>ans)
return;
for(int i=;i<=b[k];i++)
{
for(int j=;j<=m;j++)
mon[j]+=(i*a[k][j]);
bool p=false;
for(int s=;s<m;s++)
if(mon[s]!=mon[s+])
p=true;
if(!p&&m*mon[]<ans&&mon[]!=)
{
ans=mon[]*m;
for(int j=;j<=m;j++)
mon[j]-=(i*a[k][j]);
return;
}
work(k+);
for(int j=;j<=m;j++)
mon[j]-=(i*a[k][j]);
}
}

codevs 搜索题汇总(黄金级)的更多相关文章

  1. codevs 搜索题汇总(青铜+白银级)

    1792 分解质因数  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze   题目描述 Description 编写一个把整数N分解为质因数乘积的程序. 输入描 ...

  2. codevs 搜索题汇总(钻石+大师级)

    1043 方格取数 2000年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 设有N*N的方格图 ...

  3. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...

  4. bnuoj 33656 J. C.S.I.: P15(图形搜索题)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=33656 [题解]:暴力搜索题 [code]: #include <iostream> # ...

  5. [HDU 2102] A计划(搜索题,典型dfs or bfs)

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  6. 历年NOIP中的搜索题

    什么题目都不会做于是开始做搜索题. 然而我搜索题也不会做了. 铁定没戏的蒟蒻. 1.NOIP2004 虫食算 “对于给定的N进制加法算式,求出N个不同的字母分别代表的数字,使得该加法算式成立.输入数据 ...

  7. poj1475 Pushing Boxes[双重BFS(毒瘤搜索题)]

    地址. 很重要的搜索题.★★★ 吐槽:算是写过的一道码量比较大的搜索题了,细节多,还比较毒瘤.虽然是一遍AC的,其实我提前偷了大数据,但是思路还是想了好长时间,照理说想了半小时出不来,我就会翻题解,但 ...

  8. 老男孩IT教育-每日一题汇总

    老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...

  9. POJ-2386Lake Counting,搜索题。。

    Lake Counting Time Limit: 1000MS   Memory Limit: 65536K           Description Due to recent rains, w ...

随机推荐

  1. vs连接Oracle 客户端库时引发 BadImageFormatException

    报错:Oracle 客户端库时引发 BadImageFormatException如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式? 解决方案:http://www.cnblog ...

  2. Leetcode 6——ZigZag Conversion

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...

  3. 201621123062《java程序设计》第13周作业总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 思维导图: 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多 ...

  4. beta版本复审

    C++team复审 小组 优点 缺点 打分 MyGod小组 MyGod团队开发了一个让武汉大学的学生能够方便地了解校内二手物品交易信息,并进行相应的交易的安卓app.出发点不错,有创新点.使用了一下他 ...

  5. (原创)带模板的OLE输出EXCEL

    其实带模板的OLE输出EXCEL就是将要输出的EXCEL中一些拥有固定值(如标题,表头行等)的单元格先填充好数据和设置好格式后作为模板上传到SAP 中.这样后续在输出EXCEL时只需从SAP中将模板下 ...

  6. Apache自带 ab压测工具 Windows配置使用说明 - 随笔记录

    我们先来了解一下ab工具的概念,摘自网络: ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比如ngin ...

  7. CentOS7 防火墙firewalld详细操作

    1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld  停止: systemctl disab ...

  8. centos 6.5安装并配置mysql

    折腾了半天终于把mysql安装并配置好了,以下是安装步骤和遇到问题的解决方式 1.查看机器上是否已经安装了mysql或其相关项 # yum list installed | grep mysql如果安 ...

  9. sql 用临时表时报错 "Chinese_PRC_90_CI_AI" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突

    在用临时表关联数据库中的表做关联查询时,如果报这种情况的话,就要把临时表和关联的表的排序规则统一掉. LEFT JOIN #tsub ON #tsub.joinjarno collate Chines ...

  10. PHP环境手动搭建wamp-----Apache+MySQL+PHP

    首先下载分别下载Apache+MySQL+PHP. 然后分别解压到文件夹中. 1.安装Apache 1)检查80端口是否占用 说明:apache软件占用80软件,在计算机中一个端口只能被一个软件占用 ...