/ Vijos / 题库 / 海战 /

题解

122 条题解

  • 0
    @ 2007-06-11 17:40:13

    求p1076数据01吖.

    ├ 测试数据 01:答案错误... 

    ├ 标准行输出 Bad placement.

     ├ 错误行输出 There are 2 ships.

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

  • 0
    @ 2007-06-06 00:08:18

    TO cauchy

    3 3

    ..##.

    .###.

    ...#.

    此时也应该是Bad placement.

    虽然我也是用你那种方法...

    但这题能过是因为数据太弱了.

  • 0
    @ 2007-03-27 16:56:14

    两个判断:

    if (i>1) and (j>1) and (ord(s='#')+ord(s='#')+ord(s='#')=2) then

    /*判断s='#'时是否为Bad*/

    if (i>1) and (j>1) and (ord(s='#') + ord(s='#') + ord(s='#') = 3) then

    /*判断s'#'时是否为Bad*/

    我认为我的判断很好,推荐下.

  • 0
    @ 2007-03-14 22:56:22

    ac了,数据设计的还真好......

  • 0
    @ 2007-01-25 19:13:42

    一不小心就AC了

  • 0
    @ 2007-01-01 21:25:01

    第一次提交:没写There are X ships 而直接输出数目。。。30分

    第二次提交:写了这句话没写句号!!~~~。。。还是30分

    第三次提交:错了数据6。标准是1,我输出Bad placement. 90分。

    第四次提交:骗数据。发现在本机运行是对的~~为什么传上去就错呢…… 当然0分!

    第五次提交:CHEAT一个点也不会损失太多RP的。。。可又没打句号!!!……90分

    第六次提交:终于100分……

  • 0
    @ 2006-11-09 15:57:05

    今天RP真是好 连续2个一次AC

    貌似我的方法和大家都不一样...

  • 0
    @ 2006-10-28 23:21:33

    枚举,累死我了

    在fash上第10组数据超时,

    交到puppy就过了!

  • 0
    @ 2006-10-24 20:57:01

    貌似楼下的大脑出问题了!!!!!!

    (我俩同一学校的)。

    枚举就过!!!!!!!!!!!!!

  • 0
    @ 2006-10-24 10:44:15

    狂汗~~~~~~~~~~~~~~~~~~~~~

    用枚举+广搜居然过了。。。。。。。。。。。。。。

    汗~~~~~~~~~~~~~~~~

    暴汗~~~~~~~~~~~~~~

    疯狂汗~~~~~~~~~~~~

    汗流浃背~~~~~~~~~~~

    汗死~~~~~~~~~~~~~~

  • 0
    @ 2006-10-23 11:49:09

    嘎嘎,过啦~~~

    枚举所有点,若这个点是船的一部分则找判断这个点在船的什么位置,如果合理且第一次找到这个船则船总数+1,如果不合理则退出

  • 0
    @ 2006-10-22 20:45:37

    枚举,如是#则尽量沿行和列扩展,做上标记'true'.

    看沿行线 每一列可扩展的节点数是否相同

    不同则'bad placement'否则统计t:=t=1

    只是注意...#.

        ..##.

        ...#.

  • 0
    @ 2006-10-10 16:05:06

    枚举就可以过

    枚举每个点,如果这个点周围的点的个数是4,6,7则输出“bad placement”并结束

    如果是1或者2,而且周围点的个数大于等于1也输出“bad placement”并结束

    否则就不管,在枚举的时候记录哪个点走过,走到这个点的时候,周围有“#”的点也都改成走过…在枚举到一个新点的时候,如果该点没有走过则个数加1…如果所有点都枚举完而没有退出则输出个数。

  • 0
    @ 2006-08-08 21:53:33

    呵呵,不妨将数据放大一点.比如5000*5000,然后卡一下内存.

  • 0
    @ 2006-06-11 15:05:57

    floodfill

    用x1,y1,x2,y2记录左上角和右下角坐标,若floodfill搜出的个数(x2-x1+1)*(y2-y1+1)then writeln('Bad Placement!')

  • 0
    @ 2006-03-17 22:41:12

    一个方法判断是否矩形,那就是记录下向右,向下的的连续值,一旦终短就不记录,只要floodfill搜出的数和向右,向下的的连续值的乘积不相等就输出Bad Placement!

  • 0
    @ 2006-03-20 19:58:34

    最简单的判断方法:如果两个矩形相接 则必定会出现一个L形的内转角 只需考虑是否存在一个格子,其周围的8个格子有7个与其颜色相同......(四边界的格子特殊处理一下)

  • 0
    @ 2006-03-16 22:56:39

    比较简单的方法:

    floodfill+一个O(n^2)的判断

    不过效率有点低

  • 0
    @ 2006-03-16 21:13:59

    和1057.1063一样的题目

  • -1
    @ 2018-08-16 09:29:30
    
    #include<iostream>
    #include<algorithm>
    #include<cstdlib>
    #include<cstring>
    #include<cstdio>
    #include<queue>
    #define LiangJiaJun main
    using namespace std;
    char mp[1004][1004];
    int n,m,ans=0;
    int dx[4]={0,1,0,-1},
        dy[4]={1,0,-1,0};
    queue<int>qx,qy;
    int GG=0;
    void bfs(int a,int b){
         qx.push(a);qy.push(b);
         int lp=a,rp=b,gt=a,kt=b,g=1;mp[a][b]='.';
         while(!qx.empty()){
            int x=qx.front(),y=qy.front();
            qx.pop();qy.pop();
            for(int i=0;i<4;i++){
                int nowx=x+dx[i],nowy=y+dy[i];
                if(nowx>0&&nowx<=n&&nowy<=m&&nowy>0&&mp[nowx][nowy]=='#'){
                    qx.push(nowx);qy.push(nowy);++g;
                    mp[nowx][nowy]='.';
                    lp=min(lp,nowx);gt=max(gt,nowx);
                    rp=min(rp,nowy);kt=max(kt,nowy);
                }
            }
         }
         if((gt-lp+1)*(kt-rp+1) != g)GG=1;
    }
    int LiangJiaJun(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)scanf("%s",mp[i]+1);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                if(mp[i][j]=='#'){
                    GG=0;
                    ++ans;bfs(i,j);
                    if(GG){
                        puts("Bad placement.");
                        return 0;
                    }
                }
            }
        printf("There are %d ships.\n",ans);
        return 0;
    }
    

信息

ID
1076
难度
5
分类
搜索 | 搜索与剪枝 点击显示
标签
(无)
递交数
3107
已通过
1032
通过率
33%
被复制
10
上传者