struct-来大神帮看看 ACM_51nod_1289

问题描述

来大神帮看看 ACM_51nod_1289

网站



#include <stdio.h>

struct fish
{
    int dx,fx,vis;
} a[100005];

int main()
{
    int n,i,j,ans,lmax,rmax,l,r;
    scanf("%d",&n);
    ans=n;
    lmax=rmax=0;
    l=1;
    r=n;
    for(i=1; i<=n; i++)
    {
        scanf("%d %d",&a[i].dx,&a[i].fx);
        if(a[i].fx==1&&lmax==0)
        {
            lmax=a[i].dx;
            l=i;
        }//找向右游的第一个
        if(a[i].fx==0)
        {
            rmax=a[i].dx;
            r=i;
        }//从右边起找 向左游的第一个
        a[i].vis=1;
    }
//    printf("%d %d %d %dn",l,lmax,r,rmax);
    for(i=l+1,j=r-1; i<=n&&j>=1; i++,j--)
    {
        if(a[i].vis)//将要面对的鱼活着
        {
            if(a[i].fx==0)//向左游的
            {
                if(a[l].vis)//大鱼活着
                {
                    if(lmax>a[i].dx)//能吃
                    {
                        ans--;
                        a[i].vis=0;//吃掉
                    }
                    else
                    {
                        ans--;
                        a[l].vis=0;//被吃掉
                    }
                }
            }
            else //同方向的
            {
                if(lmax<a[i].dx||a[l].vis==0) //比我大 或者大鱼被吃 补充
                {
                    lmax=a[i].dx;//你做老大
                    l=i;
                }
            }
        }

        if(a[j].vis)
        {
            if(a[j].fx==1)
            {
                if(a[r].vis)
                {
                    if(rmax>a[j].dx)
                    {
                        ans--;
                        a[j].vis=0;
                    }
                    else
                    {
                        ans--;
                        a[r].vis=0;
                    }
                }
            }
            else
            {
                if(rmax<a[j].dx||a[r].vis==0)
                {
                    rmax=a[j].dx;
                    r=j;
                }
            }
        }
    }

    for(i--; i<=n; i++)
    {
        if(a[i].vis)
        {
            if(a[i].fx==0)
            {
                if(a[l].vis)
                {
                    if(lmax>a[i].dx)//能吃
                    {
                        ans--;
                        a[i].vis=0;//吃掉
                    }
                    else
                    {
                        ans--;
                        a[l].vis=0;//被吃掉
                    }
                }
            }
            else
            {
                if(lmax<a[i].dx||a[l].vis==0)
                {
                    lmax=a[i].dx;
                    l=i;
                }
            }
        }
    }

    for(j++; j>=1; j--)
    {
        if(a[j].vis)
        {
            if(a[j].fx==1)
            {
                if(a[r].vis)
                {
                    if(rmax>a[j].dx)
                    {
                        ans--;
                        a[j].vis=0;
                    }
                    else
                    {
                        ans--;
                        a[r].vis=0;
                    }
                }
            }
            else
            {
                if(rmax<a[j].dx||a[r].vis==0)
                {
                    rmax=a[j].dx;
                    r=j;
                }
            }
        }
    }
    printf("%dn",ans);
    return 0;
}

过了三个样例 实在找不到哪里有问题 有大神帮我看看吗

解决方案

这问题也太模糊了。。。。
struct fish
{
int dx,fx,vis;
} a[100005]
这里的结构体数组最好可以动态非配,静态分配可能会出现运行内存过大的问题

时间: 2024-08-29 07:17:06

struct-来大神帮看看 ACM_51nod_1289的相关文章

c语言 树结构 二叉树-初学二叉树 运行有错误 瞅了几个小时无果 大神帮帮忙 找出错误在哪

问题描述 初学二叉树 运行有错误 瞅了几个小时无果 大神帮帮忙 找出错误在哪 ![图片说明](http://img.ask.csdn.net/upload/201503/07/1425715444_303984.png #include #include typedef struct Tree { int date; struct Tree *lson,*rson; }tree , *ztree; int a[200005]; ztree creat(ztree t,int n) { int h

数据-我觉得我见鬼了,请大神帮我看看我到底是不是真的见鬼了,现在凌晨三点了

问题描述 我觉得我见鬼了,请大神帮我看看我到底是不是真的见鬼了,现在凌晨三点了 #include #include #include typedef struct Node ND; struct Node{ //结构体 int data; //数据预,存放结构体的数据,哲理简单化,假设只有一个data struct Node * pNext; //指针域,用来存放下一个节点的指针或者上一个节点的指针或者其他节点的指针,这里简化只存放下一个节点的指针 }; /*函数声明*/ //void trav

软件开发-求大神帮我看看C++代码

问题描述 求大神帮我看看C++代码 以下是我的.h头文件: #include <vector> #include<iostream> #include <iomanip> #include <math.h> #define M_PI 3.14159265359 ////////**************定义目标状态***************//////// typedef struct strTargetState//笛卡尔坐标系位置 { double

测试-贪吃蛇语法有问题 求各位大神帮帮忙

问题描述 贪吃蛇语法有问题 求各位大神帮帮忙 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> #include<time.h> const char Shead = '@';//蛇头 const char Sbody = '#';//蛇身 const char Sfood = '*';//食物 const char Snode = '.';//地图

c++-求大神帮我把这机构化的C++程序改成C++面向对象的程序,有酬谢(单项选择题标准化考试系统)

问题描述 求大神帮我把这机构化的C++程序改成C++面向对象的程序,有酬谢(单项选择题标准化考试系统) #include<stdio.h>#include<stdlib.h>//应用动态存储分配函数//#include<time.h># define LEN sizeof(struct question)struct question{ char ask[200];//选择题题目// char answer[4][80];//选择题选项每个答案的长度// int rig

c#-跪求大神帮帮忙,都好说。。。

问题描述 跪求大神帮帮忙,都好说... 实验目的: 1. 掌握常用控件的属性.方法.事件 2. 掌握窗体的常用属性.方法和事件 3. 掌握Windows应用程序人机界面可视化设计方法 4. 掌握事件驱动模型的思想 5. 巩固C#语言中类的定义.继承.流程控制语句等基础知识 实验步骤: (1) 在.Net环境中建立Windows窗体应用程序: (2) 定义枚举类型 Public enum SexType {男, 女, 未知}: Public enum ProTitle (助教,讲师,副教授.教授.

disk-求大神帮我运行这个代码,操作系统磁盘的直接读写。不知道错误的原因是不是因为没有软盘,

问题描述 求大神帮我运行这个代码,操作系统磁盘的直接读写.不知道错误的原因是不是因为没有软盘, #include //说明sdk的头文件 //#include"floppy.h" #include #include typedef struct disk //Disk是结构体指针 { HANDLE floppyDisk; DISK_GEOMETRY theSupportedGeometry; }*Disk; //以下为程序中用到的四个函数 Disk openfloppy(char dr

线段树 c++-线段树 uva11992 求大神帮看看,实在不知道错在哪里。。。。。

问题描述 线段树 uva11992 求大神帮看看,实在不知道错在哪里..... 特别是,Query函数这个函数,我实在是晕的很..... #include #include #include #include using namespace std; #define MAX 3000100 const int inf=1000000009; const int MAXN = 1000010; struct Node{ int L,R; int minv,maxv,sumv; int addv,s

求大神帮小女子指导一下程序,遥控按键按下 1602 无法显示按键值

问题描述 求大神帮小女子指导一下程序,遥控按键按下 1602 无法显示按键值 /*----------------------------------------------- 名称:遥控器红外解码数液晶显示 ------------------------------------------------*/ #include #include #define uchar unsigned char #define uint unsigned int uchar i,a,b,c,d; uint