星际战争I(Easy)
Description(描述)
现在是星际战争的第一个年头。
绝地武士躲藏在一颗大小为N \times MN×M 的矩形二维星球上。
贸易联盟想要消灭他们,但是经历过之前的战斗之后,贸易联盟知道:
铁罐头是打不过绝地武士的!
所以他们决定展开轰炸。
受限于技术,贸易联盟的轰炸机无法轰炸星球的边缘(最靠外的格子)。
丢下一枚炸弹会对目标格造成4点破坏,对具有邻边的4个格子造成1点伤害。
可以重复轰炸同一个格子,所有格子的伤害值累加
| 0 | 0 | 0 | 0 | 0 |
|---|---|---|---|---|
| 0 | 0 | 1 | 0 | 0 |
| 0 | 1 | 4 | 1 | 0 |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 |
经过Q次轰炸之后,贸易联盟获得了对这个星球破坏状况的信息,除了一个格子之外。
你的上级交给了你一个任务,要你给你自己的脑袋写个程序,来计算对这个格子的伤害。
Format(格式)
Input(输入格式)
输入第一行为三个正整数N,M,Q (0< N,M <=10, 1<=Q<=3),表示星球的行数、列数和轰炸次数
接下来N行M列的矩阵,a_{i,j}ai,j表示星球土地(i,j)上的伤害值,-1表示未知位置
(左上角为(1,1),右下角为(n,m))
数据保证除了未知位置外,其余数字的值满足0 <= a_{i,j} <= 200<=ai,j<=20
数据保证合法解存在
Output(输出格式)
输出仅一行一个数字,表示未知位置的伤害值。
Sample (样例)
Input(样例输入)
5 5 2
0 0 0 0 0
0 0 2 0 0
0 2 -1 2 0
0 0 2 0 0
0 0 0 0 0
Output(样例输出)
8
Limitation(限制)
时间限制:1s
空间限制:128MB
Hint(提示)
Source(来源)
Vijos Original
题目链接
https://www.vijos.org/d/XMU_ACM/p/5a9a3ea2d3d8a1371223e331
题目大意
给一个n*m(<=10)的网格,和轰炸次数(<=3),每次轰炸会使被轰炸格子+4,相邻四个格子+1
已知包含一个未知格子的网格状态,求未知格子的值
题目思路
【数学规律】
由分析可知,每一枚炸弹必然对星球造成8点伤害,所以8*炸弹数-已知的伤害总和,即是未知格子受到的伤害
另一种比较麻烦的做法是:
考虑到最多只会丢下3发炸弹,所以可以把格子分为损害值> 3和损害值<=3的两类。其中<=3的格子,必定不是受到直接轰炸的格子。
我们可以筛选出> 3的点,把四周的轰炸伤害的值扣除,最终也能得到答案。
#define _CRT_SECURE_NO_WARNINGS
/****************************************************
Author : Coolxxx
Copyright 2018 by Coolxxx. All rights reserved.
BLOG : http://blog.csdn.net/u010568270
****************************************************/
#include<bits/stdc++.h>
#pragma comment(linker,"/STACK:1024000000,1024000000")
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define mem(a,b) memset(a,b,sizeof(a))
#define N 104
const double EPS = 1e-8;
const int J = 10;
const int MOD = 1000000007;
const int MAX = 0x7f7f7f7f;
const int inf = 100;
using namespace std;
int n, m, lll, ans, cas;
int main()
{
#ifndef ONLINE_JUDGE
//freopen("1.txt", "r", stdin);
//freopen("2.txt", "w", stdout);
#endif
int i, j, k;
int x, y, z;
while (~scanf("%d%d", &n, &m) && n && m)
{
ans=0;
scanf("%d",&cas);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%d",&x);
if(x==-1)continue;
if((i+j)&1)ans+=x;
else ans-=x;
}
}
printf("%d\n",abs(ans));
}
return 0;
}
/*
//
//
*/
本文介绍了一款基于数学规律的轰炸模拟算法,用于解决在有限的星球地图中,通过已知的轰炸次数和破坏情况推算未知格子受到的伤害值。该算法巧妙利用了每枚炸弹对星球造成的固定伤害规律。
1140

被折叠的 条评论
为什么被折叠?



