bzoj 1493 暴力

  我们可以枚举每个点,然后求出这个点到其余点最小消耗的代价,求出比t小的且距离最大的更新答案。


/**************************************************************
Problem: 1295
User: BLADEVIL
Language: C++
Result: Accepted
Time:4572 ms
Memory:3944 kb
****************************************************************/

//By BLADEVIL
#include <cmath>
#include <cstdio>
#include <cstring>
#define maxn 400

using namespace std;

int n,m,T;
char s[maxn];
int map[maxn][maxn],quex[maxn*maxn],quey[maxn*maxn],dis[maxn][maxn],flag[maxn][maxn];
int go[5][2];
double ans;

double max(double a,double b) {
if (a>b) return a; else return b;
}

int main() {
go[1][0]=go[4][1]=-1; go[2][1]=go[3][0]=1;
scanf("%d%d%d",&n,&m,&T);
for (int i=1;i<=n;i++) {
scanf("%s",s+1);
for (int j=1;j<=m;j++) map[i][j]=s[j]!=‘0‘?1:0;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++) {
memset(dis,127,sizeof dis);
memset(flag,0,sizeof flag);
quex[1]=i; quey[1]=j; dis[i][j]=(map[i][j]==1);
int h(0),t(1);
while (h<t) {
h=(h%2000)+1;
int curx(quex[h]),cury(quey[h]);
flag[curx][cury]=0;
for (int k=1;k<=4;k++) {
int nx(curx+go[k][0]),ny(cury+go[k][1]);
if ((nx<1)||(nx>n)||(ny<1)||(ny>m)) continue;
if (dis[curx][cury]+(map[nx][ny]==1)<dis[nx][ny]) {
dis[nx][ny]=dis[curx][cury]+(map[nx][ny]==1);
if (!flag[nx][ny]) {
t=(t%2000)+1;
quex[t]=nx; quey[t]=ny;
flag[nx][ny]=1;
}
}
}
}
for (int ii=1;ii<=n;ii++)
for (int jj=1;jj<=m;jj++) if (dis[ii][jj]<=T) ans=max(ans,(ii-i)*(ii-i)+(jj-j)*(jj-j));
}
ans=sqrt(ans);
printf("%.6f\n",ans);
return 0;
}

bzoj 1493 暴力

时间: 2024-12-06 17:29:32

bzoj 1493 暴力的相关文章

bzoj 1493: [NOI2007]项链工厂(线段树)

1493: [NOI2007]项链工厂 Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 1256  Solved: 545[Submit][Status][Discuss] Description Input 输 入文件第一行包含两个整数N, c,分别表示项链包含的珠子数目以及颜色 数目.第二行包含N 个整数,x1, x2…, xn,表示从位置1 到位置N 的珠子的颜色, 1 ≤ xi ≤ c.第三行包含一个整数Q,表示命令数目.接下来的Q 行每行一

【BZOJ 1493】[NOI2007]项链工厂

1493: [NOI2007]项链工厂 Time Limit: 30 Sec  Memory Limit: 64 MB Submit: 992  Solved: 454 [Submit][Status] Description   Input 输入文件第一行包含两个整数N, c,分别表示项链包含的珠子数目以及颜色 数目.第二行包含N 个整数,x1, x2-, xn,表示从位置1 到位置N 的珠子的颜色, 1 ≤ xi ≤ c.第三行包含一个整数Q,表示命令数目.接下来的Q 行每行一条命令, 如上

bzoj 3620 暴力KMP

十分暴力的KMP,枚举左端点,在向右侧推进的同时,取较小的la保证条件,n方暴力 #include<bits/stdc++.h> #define rep(i,j,k) for(int i=j;i<=k;i++) #define inf 0x3fffffff using namespace std; const int N=20000; char s[N];int l,k,nxt[N],la[N],ans; int main(){ freopen("3620.in",&

BZOJ 1493 NOI2007 项链工厂

题目大意:维护一个环,每个点有一个颜色,提供6种操作: 1.将这个环顺时针旋转k 2.沿点1所在直径翻转 3.将两个珠子互换 4.将一段区间染色 5.查询这个环上有多少颜色段 6.查询一段区间有多少颜色段 关于颜色段通用的处理方法是每个区间记录三个值,颜色段数.左端点颜色.右端点颜色,合并时颜色段数相加,如果左区间右端点和右区间左端点颜色相同则减一 然后用Splay维护区间即可 不过这题还是有一些小细节需要处理 首先null节点要保证不会被修改 然后更新的时候特判 如果一段区间颜色是0直接返回另

BZOJ 1493 NOI 2007 项链工厂 Splay

题目大意:有一个很长的带颜色的项链,要求你快速的维护一种数据结构,他可以: 1.把序列的后k个放在前面. 2.将区间2~cnt的珠子翻转. 3.将位置i和位置j的珠子互换. 4.将区间i到j染色成k 5.输出整个序列的颜色块的个数 6.输出从i到j的颜色块的个数. 思路:Splay.有些不好处理的是要时刻想着这是一个环,所以所有的计算颜色块的个数的时候要考虑收尾的颜色是否相同.还有从序列的尾部到转一圈回去的情况. 就因为这个题我的代码有个小小小小的问题,花了仨小时的时间带着数据才把错找到..简直

NOIP 考前 暴力练习

BZOJ 1028 暴力枚举听的那张牌,和那个多余的两张牌,其余的mod3后模拟就可以了 1 #include <cstdio> 2 const int Maxn=510; 3 int n,m,a[Maxn],b[Maxn],cnt,Ans[Maxn],x; 4 bool Check() 5 { 6 for (int i=1;i<=n;i++) 7 if (a[i]>=2) 8 { 9 for (int j=1;j<=n+2;j++) b[j]=a[j]; 10 b[i]-=

9.29 奶牛练习题

/*bzoj 1613*/ /*暴力5884ms*/ #include<cstdio> #define maxn 10010 using namespace std; int n,m,a[maxn],f[maxn][510]; int max(int x,int y){ return x>y?x:y; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d&

OI本月刷水记录

bzoj 1044 硬币购物 如果没有每个硬币的个数限制,这就是一个完全背包计数问题,现在我们注意到硬币个数很少,于是我们分别考虑一下每个硬币不符合条件的情况,容斥一下即可 bzoj 1225假如不考虑高精度的情况,那么转移还是好考虑的 f[i][j]表示前i个质数有j的约数最小数字 f[i][j]=minprime[i]k|jf[i?1][j/(k+1)]?prime[i]k 但万恶的高精度啊= =,于是改成搜索,然后用对数来表示,就好了 bzoj 2440 一道很神的数论题,二分+容斥+莫比

BZOJ 1054题解 BFS暴力求解

BZOJ 1054题解 BFS暴力求解 1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1884  Solved: 1033[Submit][Status][Discuss] Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动次数将初始的玩具状态移 动到某人