题意:给出一个带有n*m个格子的矩阵,部分格子中有靶子target,现在要从一个没有靶子的格子中射出飞刀数把,飞刀是可穿透靶子的,同一直线上都可以一刀全射掉。现在问在哪个格子射出飞刀,可以在全部射中的情况下用刀次数最少?有target的格子不可选。

思路:穷举所有没有靶子的格子,计算每个靶子的角度,若角度相同就是可以一刀解决的。这里角度可能用的是实数的,用map解决。需要注意的是,在判断角度时,可能有重复,比如: 。t。。x。t。。 这里的x代表飞刀的出发点,‘t’代表靶子,那么两边的 t 计算出来的角度是相同的(按照靶子坐标的x/y来算角度即可)。需要做的只是对上下两边进行区分即可。

 #include<bits/stdc++.h>
using namespace std;
bool tar[][];//标出每个靶子
int x[],y[];//记录每个靶子的坐标
map<double,int> mapp1,mapp2; void cal(int n,int m,int t)
{
int ans[]={,,};//答案
for(int i=; i<n; i++)
{
for(int j=; j<m; j++)
{
if(!tar[i][j]) //对于每个非有刀格子
{
mapp1.clear();
mapp2.clear();
int cnt_l=,cnt_r=;
for(int k=; k<t; k++)//扫描所有的target
{
if(y[k]>j) //上边的
{
double q=(double)(y[k]-j)/(x[k]-i);
if(mapp1[q]<=)
mapp1[q]=;
}
else if(y[k]<j) //下边的
{
double q=(double)(y[k]-j)/(x[k]-i);
if(mapp2[q]<=)
mapp2[q]=;
}
else //同一行的
{
if(x[k]>i) //同行左边
cnt_l=;
else //同行右边
cnt_r=;
}
}
if(ans[]>cnt_l + cnt_r + mapp1.size()+mapp2.size())//有更少的,则更新答案
{
ans[]=cnt_l + cnt_r + mapp1.size() + mapp2.size();
ans[]=i;
ans[]=j;
}
}
}
}
printf("(%d, %d) %d\n",ans[],ans[],ans[]);
} int main()
{
//freopen("e://input.txt","r",stdin);
int n, m, t, a, b;
while(cin>>n>>m)
{
memset(tar,,sizeof(tar));
scanf("%d",&t);
for(int i=; i<t; i++)
{
scanf("%d%d",&x[i],&y[i]);
tar[x[i]][y[i]]=true;
}
cal(n,m,t);
} return ;
}

AC代码

NBUT 1121 Sakuya's Fly Knife 飞刀(暴力)的更多相关文章

  1. bzoj1800[Ahoi2009]fly 飞行棋 暴力枚举

    找了道bzoj的水题,千年难得一遇. 建议初学者做做,然而我个蒟蒻初学时应该A不了..... < http://www.lydsy.com/JudgeOnline/problem.php?id= ...

  2. bzoj 1800: [Ahoi2009]fly 飞行棋 暴力

    1800: [Ahoi2009]fly 飞行棋 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...

  3. [bzoj1800]fly 飞行棋<暴力>

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1800 说实话我这几天运气不错,随便在bzoj上找题都可以找到水题,这题在代码上没有丝毫难度 ...

  4. BZOJ 1800: [Ahoi2009]fly 飞行棋【思维题,n^4大暴力】

    1800: [Ahoi2009]fly 飞行棋 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1689  Solved: 1335[Submit][St ...

  5. Friends number NBUT - 1223 (暴力打表)

    Paula and Tai are couple. There are many stories between them. The day Paula left by airplane, Tai s ...

  6. BZOJ 1800: [Ahoi2009]fly 飞行棋【暴力】

    Description 给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列. 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形. Input 第一行为 ...

  7. NBUT 1457 Sona(莫队算法+离散化)

    [1457] Sona 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Sona, Maven of the Strings. Of cause, she can play the ...

  8. Uva 10167 - Birthday Cake 暴力枚举 随机

      Problem G. Birthday Cake Background Lucy and Lily are twins. Today is their birthday. Mother buys ...

  9. BZOJ_2754__[SCOI2012]_喵星球上的点名_(暴力+后缀数组)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2754 给出n个姓名串和m个点名串.求每个点名串在多少人的姓名中出现过(在名中出现或在姓中出现, ...

随机推荐

  1. poj 3686

    The Windy's Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3791   Accepted: 1631 Descr ...

  2. oc和swift的混编

    参考:http://blog.sina.com.cn/s/blog_8d1bc23f0102v5tl.html swift中使用oc类的方法 1.创建一个oc.h文件 2.添加需要倒入的oc类的头文件 ...

  3. Android 检查设备是否存在 导航栏 NavigationBar

    尊重原创.尊重作者,转载请标明出处: http://blog.csdn.net/lnb333666/article/details/41821149 目前也没有可靠的方法来检查设备上是否有导航栏.可以 ...

  4. PHP 字符串函数--替换、正则匹配等

    名称 支持正则 特 点 备注 str_replace X 字符串替换函数,大小写敏感   str_ireplace X 字符串替换函数,大小写不敏感,支持数组式批量替换 感谢网友franci, 提醒添 ...

  5. node操作mysql数据库

    1.建立数据库连接:createConnection(Object)方法       该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database.与php ...

  6. node入门开发遇到的问题

    最近在看node入门这本书,https://cnodejs.org/getstart 里面是跟随作者完成一个小的demo,书中不免会有遗漏的,下面是我在实现里面最后一个例子时遇到的问题,希望能够帮助其 ...

  7. Java常用类库

    System System:类中的方法和属性都是静态的. out:标准输出,默认是控制台. in:标准输入,默认是键盘. System描述系统一些信息.获取系统属性信息:Properties getP ...

  8. android真机自动化测试

    appium执行用例时报错问题: 问题解析: 一般该种情况都是因为来连接了多个设备,验证办法:cmd->执行adb devices  看结果是否是多个devices ,如果是这个问题,停掉多余设 ...

  9. iOS手势学习UIGestureRecognizer & cocos2d 手势推荐

    iOS手势学习UIGestureRecognizer & cocos2d 手势推荐 手势识别类型: UILongPressGestureRecognizer  // 长按UIPanGestur ...

  10. servlet学习笔记一

    Servlet一.基本概念 我们的程序根据是否需要访问网络,可分为网络程序和非网络程序.而 网络程序又分为B/S结构和C/S结构. 什么是C/S?即客户端(Client)/服务器(Server)模式. ...