zoukankan      html  css  js  c++  java
  • CF 327D -Block Tower

    题意:给定一个网格,然后其中的  '.'   中可以建塔,有两种塔,绿塔可以装100人,红塔可以容纳200人不过必须要边上有绿塔(同边)的时候才能建造,对一个  '.'格子有三种操作,

    建立绿塔,摧毁塔,建立红塔,让你给出一种方案使得容纳总人数最多

    解题思路:先把每一个 ‘.’   建立绿塔,可以把每 一块  独立的  '.' 单独出来bfs   然后从栈尾的点一直摧毁建立红塔一直到栈只剩一个元素,就这样就可以了!!

    解题代码:

      1 // File Name: d.c
      2 // Author: darkdream
      3 // Created Time: 2013年07月18日 星期四 20时43分56秒
      4 
      5 #include<stdio.h>
      6 #include<string.h>
      7 #include<stdlib.h>
      8 #include<time.h>
      9 #include<math.h>
     10 #include<ctype.h>
     11 char str[505][505];
     12 int  step[1000005][4];
     13 int  visit[505][505];
     14 struct node
     15 {
     16     int x,y;
     17 }list[260000];
     18 int xdd[] = {0,0,1,-1};
     19 int ydd[] = {1,-1,0,0};
     20 int k = 0 ;
     21 void doright(int i , int j )
     22 {
     23    int up = 1; 
     24    int high = 1; 
     25    list[1].x = i ;
     26    list[1].y = j;
     27    visit[i][j] = 1;
     28    while(up <= high)
     29    {
     30       for(int t = 0 ;t <= 3 ;t ++)
     31       {
     32           int ti = list[up].x + xdd[t];
     33           int tj = list[up].y + ydd[t];
     34           if(str[ti][tj] == '.' && visit[ti][tj] == 0 )
     35           {
     36                 visit[ti][tj] = 1;
     37                 high ++;
     38                 list[high].x = ti ;
     39                 list[high].y = tj ;
     40           }
     41       
     42       }
     43       up++;
     44    }
     45    for(int t = high ;t > 1; t --)
     46    {
     47       str[list[t].x][list[t].y] = '#';
     48       k++;
     49       step[k][1] = 2 ;
     50       step[k][2] = list[t].x;
     51       step[k][3] = list[t].y;
     52       k++;
     53       step[k][1] = 3 ;
     54       step[k][2] = list[t].x;
     55       step[k][3] = list[t].y;
     56    }
     57   
     58 }
     59 
     60 int main(){
     61    memset(visit,0,sizeof(visit));
     62    //freopen("/home/plac/problem/input.txt","r",stdin);
     63    //freopen("/home/plac/problem/output.txt","w",stdout);
     64    int n ,m ;
     65    scanf("%d %d",&n,&m);
     66    for(int i = 1;i <= n;i ++)
     67    {
     68       scanf("%s",&str[i][1]);
     69    }
     70  
     71    for(int i= 1;i <= n;i ++)
     72        for(int j = 1; j <= m;j ++)
     73        {
     74          if(str[i][j] == '.')
     75          {
     76            k++;
     77            step[k][1] = 1;
     78            step[k][2] = i;
     79            step[k][3] = j;
     80 
     81          }
     82        }
     83    for(int i = 1 ;i <= n;i ++)
     84        for(int j= 1;j <= m;j ++)
     85        {
     86         if(str[i][j] == '.')
     87          doright(i,j); 
     88          }
     89    printf("%d
    ",k);
     90    
     91    for(int i =1 ;i <= k ;i ++)
     92    {
     93      if(step[i][1] == 1)
     94          printf("B ");
     95      else if(step[i][1] == 2)
     96          printf("D ");
     97      else printf("R ");
     98      printf("%d %d
    ",step[i][2],step[i][3]);
     99    }
    100    //for(int i = 1;i <= n;i ++)
    101      // puts(&str[i][1]);
    102 return 0 ;
    103 }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    hdu 2444(二分图) The Accomodation of Students
    hdu 5532 (LIS) Almost Sorted Array
    hdu 1059 (多重背包) Dividing
    poj 2184(Cow Exhibition)
    hdu 2571 (命运) 那个配图女神
    poj 3624 && hdu 2955(背包入门)
    hdu 1257 && hdu 1789(简单DP或贪心)
    BBS(第一天)项目之 注册功能实现通过forms验证与 前端ajax请求触发查询数据库判断用户是否存在的功能实现
    Django之form模板的使用
    Django之Auth模块 实现登录,退出,自带session 与认证功能的一个重要的模块
  • 原文地址:https://www.cnblogs.com/zyue/p/3200411.html
Copyright © 2011-2022 走看看