ccf风险人群筛查 c++满分代码

题目描述


1f03360862dd4b38be9d41bb1371a004.png

 解题思路


1.遍历所有居民的每个时间段位置,判断该时间段居民位置是否在区域内部。(判断条件为x >= xl && x<=xr && y>=yd && y <= yu)

2.若有,则该居民一定经过区域;若有连续的点经过该区域(>=k),则该居民逗留该区域。

注意:由于题目定义逗留为连续的点,所以在某一点不经该区域时,需要将经过该区域的点的个数numlay置0,即不连续则清零。(前提是已有的numlay<逗留临界值k,否则直接置0会导致代码的逗留结果比实际值小)

标程


int main()

{

    int n, k, t;

    int xl, yd, xr, yu;

    int pass = 0, lay = 0;

    int numpass = 0, numlay = 0;

    bool flaglay = 0;

    scanf_s("%d%d%d%d%d%d%d", &n, &k, &t, &xl, &yd, &xr, &yu);

    for (int i = 0; i < n; i++)

    {

        int numpass = 0,numlay = 0;

        flaglay = 0;

        for (int j = 0; j < t; j++)

        {

            int x, y;

            

            scanf_s("%d%d", &x, &y);

            if(x >= xl && x<=xr && y>=yd && y <= yu)

            {

                numpass++;

                numlay++;

                if (numlay >= k)

                {

                    flaglay = 1;

                }    //给全是在区域内的居民留出判断机会

            }

            //numplay不连续则清零,前提此时num<k,若反之则bool flaglay = 1

            else

            {

                if (numlay >= k)

                {

                    flaglay = 1;

                }

                numlay = 0;

            }

        }

        

        if (numpass)

        {

            pass++;

        }

        if (flaglay)

        {

            lay++;

        }

        

    }

    printf("%d\n%d", pass, lay);

    return 0;

}

这样就可以得到满分了。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值