洛谷p1789 c语言 【mc生存】插火把

居然没有人发免费的c的答案,我很生气

答案如下!!!!(傻瓜式做法)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int n, m, k;
    scanf("%d %d %d",&n, &m, &k);
    int i=0;
    int x[25], y[25];
    for(i=0; i<m; i++){
        scanf("%d %d", &x[i], &y[i]);
        x[i] -= 1;
        y[i] -= 1;
    }
    int o[5], p[5];

    int a[100][100]={0};
//↓判断是否越界并把灯亮处改成1
        for(i=0; i<m; i++){
        a[x[i]][y[i]] = 2;
        if(x[i]-2>=0){
            a[x[i]-2][y[i]] = 1;
        }
        if((x[i]-1>=0) && (y[i]-1>=0)){
            a[x[i]-1][y[i]-1] = 1;
        }
        if((x[i]-1>=0) && (y[i]+1<n)){
            a[x[i]-1][y[i]+1] = 1;
        }
        if(x[i]-1>=0){
            a[x[i]-1][y[i]] = 1;
        }
        if(y[i]-2>=0){
            a[x[i]][y[i]-2] = 1;
        }
        if(y[i]-1>=0){
            a[x[i]][y[i]-1] = 1;
        }
        if(y[i]+1<n){
            a[x[i]][y[i]+1] = 1;
        }
        if(y[i]+2<n){
            a[x[i]][y[i]+2] = 1;
        }
        if((x[i]+1<n) && (y[i]-1>=0)){
            a[x[i]+1][y[i]-1] = 1;
        }
        if((x[i]+1<n) && (y[i]+1<n)){
            a[x[i]+1][y[i]+1] = 1;
        }
        if(x[i]+1<n){
            a[x[i]+1][y[i]] = 1;
        }
        if(x[i]+2<n){
            a[x[i]+2][y[i]] = 1;
        }
    }


//萤石的坐标导入,以及把灯亮的改成1
    if (k>0){
        for(i=0; i<k; i++){
            scanf("%d %d", &o[i], &p[i]);
            o[i] -= 1;
            p[i] -= 1;
        }

        for(i=0; i<k; i++){
            a[o[i]][p[i]] = 2;
            if(o[i]-2>=0){
                a[o[i]-2][p[i]] = 1;
            }
            if((o[i]-2>=0) && (p[i]-2>=0)){
                a[o[i]-2][p[i]-2] = 1;
            }
            if((o[i]-2>=0) && (p[i]-1>=0)){
                a[o[i]-2][p[i]-1] = 1;
            }
            if((o[i]-2>=0) && (p[i]+2<n)){
                a[o[i]-2][p[i]+2] = 1;
            }
            if((o[i]-2>=0) && (p[i]+1<n)){
                a[o[i]-2][p[i]+1] = 1;
            }
            if((o[i]-1>=0) && (p[i]-1>=0)){
                a[o[i]-1][p[i]-1] = 1;
            }
            if((o[i]-1>=0) && (p[i]-2>=0)){
                a[o[i]-1][p[i]-2] = 1;
            }
            if((o[i]-1>=0) && (p[i]+1<n)){
                a[o[i]-1][p[i]+1] = 1;
            }
            if((o[i]-1>=0) && (p[i]+2<n)){
                a[o[i]-1][p[i]+2] = 1;
            }
            if(o[i]-1>=0){
                a[o[i]-1][p[i]] = 1;
            }
            if(p[i]-2>=0){
                a[o[i]][p[i]-2] = 1;
            }
            if(p[i]-1>=0){
                a[o[i]][p[i]-1] = 1;
            }
            if(p[i]+1<n){
                a[o[i]][p[i]+1] = 1;
            }
            if(p[i]+2<n){
                a[o[i]][p[i]+2] = 1;
            }
            if((o[i]+1<n) && (p[i]-1>=0)){
                a[o[i]+1][p[i]-1] = 1;
            }
            if((o[i]+1>=0) && (p[i]-2>=0)){
                a[o[i]+1][p[i]-2] = 1;
            }
            if((o[i]+1<n) && (p[i]+1<n)){
                a[o[i]+1][p[i]+1] = 1;
            }
            if((o[i]+1>=0) && (p[i]+2<n)){
                a[o[i]+1][p[i]+2] = 1;
            }
            if(o[i]+1<n){
                a[o[i]+1][p[i]] = 1;
            }
            if(o[i]+2<n){
                a[o[i]+2][p[i]] = 1;
            }
            if((o[i]+2<n) && (p[i]-2>=0)){
                a[o[i]+2][p[i]-2] = 1;
            }
            if((o[i]+2<n) && (p[i]-1>=0)){
                a[o[i]+2][p[i]-1] = 1;
            }
            if((o[i]+2<n) && (p[i]+2<n)){
                a[o[i]+2][p[i]+2] = 1;
            }
            if((o[i]+2<n) && (p[i]+1<n)){
                a[o[i]+2][p[i]+1] = 1;
            }
        }
    }
//记录0的个数
    int j=0;
    int num=0;
    for (j=0; j<n; j++){
        for (i=0; i<n; i++){
            if(a[i][j] == 0){
                num = num + 1;
            }
        }
    }




//    printf("%d", a[o[0]][p[0]]);
    printf("%d", num);
    return 0;
}

嘻嘻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值