HDU4462稻草人

l问题描述:有一块N*N的玉米田(N<=50),给定K个(X,Y)的坐标位置(K<=10)和相应的覆盖范围,请问,至少在这K个位置中选择几个放置稻草人,能保证玉米田全被覆盖?

 1 #include<stdio.h>
 2 #include<cstring>
 3 #include<iostream>
 4
 5 using namespace std;
 6
 7 int field[52][52];
 8 int N,K;
 9
10 struct Node{
11     int x,y,r;
12 }node[11];
13
14 int abs(int a)
15 {
16     return a<0?-a:a;
17 }
18
19 void getField(int k)
20 {
21     for(int i=1;i<=N;i++)
22     {
23         for(int j=1;j<=N;j++)
24         {
25             if(abs(node[k].x-i)+abs(node[k].y-j)<=node[k].r) field[i][j]=1;
26         }
27     }
28 }
29
30 bool check()
31 {
32     for(int i=1;i<=N;i++)
33     {
34         for(int j=1;j<=N;j++)
35         {
36             if(field[i][j]==0) return false;
37         }
38     }
39     return true;
40 }
41
42 int main()
43 {
44     while(scanf("%d",&N)&&N!=0){
45         scanf("%d",&K);
46
47         int ans=20;
48
49         for(int i=1;i<=K;i++){
50             scanf("%d%d",&node[i].x,&node[i].y);
51         }
52         for(int i=1;i<=K;i++){
53             scanf("%d",&node[i].r);
54         }
55
56         int flag=0,count;
57         while(flag<(1<<K)){
58             memset(field,0,sizeof(field));
59             for(int i=1;i<=K;i++){
60                 field[node[i].x][node[i].y]=1;
61             }
62             count=0;
63             for(int i=0;i<K;i++)
64             {
65                 if(flag&1<<i) {count++;getField(i+1);}
66             }
67             if(check()&&ans>count) ans=count;
68             flag++;
69         }
70         if(ans<=10) cout<<ans<<endl;
71         else cout<<-1<<endl;
72     }
73     return 0;
74 }

HDU4462稻草人

时间: 2024-11-09 06:07:38

HDU4462稻草人的相关文章

《巨婴国》:差评。伪科学/非科学,逻辑比较差,以偏概全,解释牵强,竖起一个稻草人打得挺嗨。1星

读后感觉比较差.只能给1星.相当于负分的水平. 作者认为中国人大部分是没长大的婴儿,不能正确处理人际关系,隐含地推论常见的心理疾病.变态人格.不正常情商都是巨婴病的表现,明确地推论巨婴理论可以解释许多世界历史和国际政治上的事情. 差评理由有下面几个: 1:“巨婴国”的学说到底是不是一个严肃的学术上的推论?我认为不是.我认为可以归入伪科学或非科学的范畴.作者虽然是北大心理学系的本科和硕士毕业,但是全书是浓郁的江湖派的风格.作者提到了一个惊世骇俗的“巨婴学说”,并且断定中国人大部分是“巨婴”,因此中

时代的稻草人

叶圣陶老先生写过一篇童话<稻草人>:稻草人"骨架子是竹园里的细竹枝,肌肉.皮肤是隔年的黄稻草,拿着一把破扇子".稻草人尽职尽责.心地善良,但面对现实却无能为力.他爱他的主人,却不能赶走田里的害虫给主人带来好收成,他帮不了生病的孩子.频死的鲫鱼和寻死的女人--许知远的<时代的稻草人>引用了这个童话,并表达了知识分子在这个时代面前深深的无力感. <稻草人>写于1922年,正值五四运动后新思想与旧观念的激烈冲突之时,"在历史的惯性与现实面前,新思

bzoj4237 稻草人

Description JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要满足以下条件: 田地的形状是边平行于坐标轴的长方形: 左下角和右上角各有一个稻草人: 田地的内部(不包括边界)没有稻草人. 给出每个稻草人的坐标,请你求出有多少遵从启示的田地的个数 Input 第一行一个正整数N,代表稻草人的个数 接下来N行,第i行(1<=i<=N)包含2个由空格分隔的整数Xi和

BZOJ 4237: 稻草人

4237: 稻草人 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 661  Solved: 286[Submit][Status][Discuss] Description JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要满足以下条件: 田地的形状是边平行于坐标轴的长方形: 左下角和右上角各有一个稻草人: 田地的内部(不

bzoj 4237: 稻草人 -- CDQ分治

4237: 稻草人 Time Limit: 40 Sec  Memory Limit: 256 MB Description JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要满足以下条件: 田地的形状是边平行于坐标轴的长方形: 左下角和右上角各有一个稻草人: 田地的内部(不包括边界)没有稻草人. 给出每个稻草人的坐标,请你求出有多少遵从启示的田地的个数 Input 第一

bzoj4237稻草人

题意:给你一个田地,问左下角和右上角有稻草人并且内部除了边界都没有稻草人的矩形数. 标程: 1 #include<bits/stdc++.h> 2 using namespace std; 3 int read() 4 { 5 int x=0,f=1;char ch=getchar(); 6 while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();} 7 while (ch>='0'&&ch<='9'

bzoj4237: 稻草人 cdq分治 单调栈

目录 题目链接 题解 代码 题目链接 bzoj4237: 稻草人 题解 暴力统计是n^2的 考虑统计一段区间对另一端的贡献 对于y值cdq分治,降调一维 对于当前两个分治区间统计上面那部分对下面那部分的贡献 对当前两区间x排序后,对上部分维护单增单调栈,得到距离当前点最近的比她低的点p 对于下面的区间维护一个上凸壳 ,直接在凸壳上二分p统计答案 代码 #include<set> #include<cstdio> #include<cstring> #include<

4237: 稻草人

4237: 稻草人 https://www.lydsy.com/JudgeOnline/problem.php?id=4237 分析: CDQ分治+单调栈. 首先按照x排序,每次分治,考虑左边对右边的贡献.CDQ的过程中,按照y从大到小排序. 代码: 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<cmath> 5 #include<iostream>

bzoj4237 稻草人——分治

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4237 分治: 先把所有点按 y 排序,然后二分递归: 对于每个 mid ,计算经过它的矩形的个数,把上面的每个点当做右上角,考虑下面多少点可以作为左下角: 上面的限制只有前面的 y 大于等于自己的 y,所以维护递增的单调栈: 下面的限制是后面的 y 小于等于自己的 y,所以维护递减的单调栈: 还要注意 x 的限制,二分找到栈内满足条件的最前面的点,到栈顶的元素个数就是对答案的贡献. 代码如