在二维平面上,给出n个1 n整数中1出现的次数点.求有多少个不同的正多边形.+博客

(30分) 解题报告 - 倪浩鹏的博客 - CSDN博客
(30分) 解题报告
灯 塔&&&(30分)
这一刻 心如大海;
如迎风的帆 沿着海湾;
在洒满 银子的海面;
我是一艘 孤单的船;
你是否 已经在那里;
安静的 等待着;
你是否 已经在这里;
冰冷的 燃烧着。
-----彭坦 《灯塔》
这首歌曲描述的是海岸边上的灯塔,可以把灯塔的灯光想象为一个圆锥形投射到海面上的船帆上(船帆可以想象为一个二维平面)。下面给定船帆上的n个点坐标,n&=1000。求解灯塔的灯光垂直打在这个船帆上,需要直径至少多大的圆,才能够将所有点包含在其中(圆心不一定在原点)。
输入格式:
第一行为一个正整数n,1&=n&=1000 接下来的这n行为n个整数对x,y,0=&x,y&=10^6106
输出格式:
一个正整数,为包含n个点的圆最小直径的平方。
找出两个点的最长距离就是直径
#include&stdio.h&
#include&iostream&
#include&algorithm&
#include&string.h&
#include&math.h&
int main()
scanf(&%d&,&n);
for(int i=0;i&n;i++)
scanf(&%d%d&,&a[i].x,&a[i].y);
int max=0;
for(int i=0;i&n;i++)
for(int j=i+1;j&n;j++)
int sum=(a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y);
if(sum&max)max=
printf(&%d&,max);
我的热门文章
即使是一小步也想与你分享如何计算二维平面中最近的两个点? - 知乎5被浏览435分享邀请回答m.blog.csdn.net/blog/lonelycatcher/79730462添加评论分享收藏感谢收起0添加评论分享收藏感谢收起当前位置:
>>>试确定如图所示的正多边形的对称轴的条数,一般地,一个正n边形有..
试确定如图所示的正多边形的对称轴的条数,一般地,一个正n边形有多少条对称轴?
正多边形边数
对称轴条数
根据上表,可以猜想得到:一个正n边形有对称轴______条.
题型:解答题难度:中档来源:不详
如图所示:
正多边形边数
对称轴条数
8根据上表,可以猜想得到:一个正n边形有对称轴n条.
马上分享给同学
据魔方格专家权威分析,试题“试确定如图所示的正多边形的对称轴的条数,一般地,一个正n边形有..”主要考查你对&&探索规律&&等考点的理解。关于这些考点的“档案”如下:
现在没空?点击收藏,以后再看。
因为篇幅有限,只列出部分考点,详细请访问。
探索规律的题目,通常按照一定的顺序给出一系列量,要求我们根据这些已知的量找出一般规律。揭示的规律,常常包含着事物的序列号。所以,把变量和序列号放在一起加以比较,就比较容易发现其中的奥秘。掌握探究的一般方法是解决此类问题的关键。 (1)掌握探究规律的方法,可以通过具体到抽象、特殊到一般的方法,有时通过类比、联想,还要充分利用已知条件或图形特征进行透彻分析,从中找出隐含的规律; (2)恰当合理的联想、猜想,从简单的、局部的特殊情况到一般情况是基本思路,经过归纳、提炼、加工,寻找出一般性规律,从而求解问题。 探索规律题题型和解题思路:1.探索条件型:结论明确,需要探索发现使结论成立的条件的题目;探索条件型往往是针对条件不充分、有变化或条件的发散性等情况,解答时要注意全面性,类似于讨论;解题应从结论着手,逆推其条件,或从反面论证,解题过程类似于分析法。2.探索结论型:给定条件,但无明确的结论或结论不唯一,而要探索发现与之相应的结论的题目;探索结论型题的特点是结论有多种可能,即它的结论是发散的、稳定的、隐蔽的和存在的;探索结论型题的一般解题思路是:(1)从特殊情形入手,发现一般性的结论;(2)在一般的情况下,证明猜想的正确性;(3)也可以通过图形操作验证结论的正确性或转化为几个熟悉的容易解决的问题逐个解决。3.探索规律型:在一定的条件状态下,需探索发现有关数学对象所具有的规律性或不变性的题目;图形运动题的关键是抓住图形的本质特征,并仿照原题进行证明。在探索递推时,往往从少到多,从简单到复杂,要通过比较和分析,找出每次变化过程中都具有规律性的东西和不易看清的图形变化部分。4.探索存在型:在一定的条件下,需探索发现某种数学关系是否存在的题目.而且探索题往往也是分类讨论型的习题,无论从解题的思路还是书写的格式都应该让学生明了基本的规范,这也是数学学习能力要求。探索存在型题的结论只有两种可能:存在或不存在;存在型问题的解题步骤是:①假设存在;②推理得出结论(若得出矛盾,则结论不存在;若不得出矛盾,则结论存在)。&解答探索题型,必须在缜密审题的基础上,利用学具,按照要求在动态的过程中,通过归纳、想象、猜想,进行规律的探索,提出观点与看法,利用旧知识的迁移类比发现接替方法,或从特殊、简单的情况入手,寻找规律,找到接替方法;解答时要注意方程思想、函数思想、转化思想、分类讨论思想、数形结合思想在解题中的应用;因此其成果具有独创性、新颖性,其思维必须严格结合给定条件结论,培养了学生的发散思维,这也是数学综合应用的能力要求。
发现相似题
与“试确定如图所示的正多边形的对称轴的条数,一般地,一个正n边形有..”考查相似的试题有:
309265535870358407166430139495118522POJ 3241 Object Clustering 二维平面曼哈顿距离最小生成树
给定二维平面上的n个点坐标,常数k
下面n行给出坐标
求一个最小生成树,问第k大的边是多少。
任意两个点间建一条边的花费是其曼哈顿距离。
一、曼哈顿距离最小生成树
曼哈顿距离最小生成树问题可以简述如下:
给定二维平面上的N个点,在两点之间连边的代价为其曼哈顿距离,求使所有点连通的最小代价。
朴素的算法可以用O(N2)的Prim,或者处理出所有边做Kruskal,但在这里总边数有O(N2)条,所以Kruskal的复杂度变成了O(N2logN)。
但是事实上,真正有用的边远没有O(N2)条。我们考虑每个点会和其他一些什么样的点连边。可以得出这样一个结论,以一个点为原点建立直角坐标系,在每45度内只会向距离该点最近的一个点连边。
这个结论可以证明如下:假设我们以点A为原点建系,考虑在y轴向右45度区域内的任意两点B(x1,y1)和C(x2,y2),不妨设|AB|&|AC|(这里的距离为曼哈顿距离),如下图:
|AB|=x1+y1,|AC|=x2+y2,|BC|=|x1-x2|+|y1-y2|。而由于B和C都在y轴向右45度的区域内,有y-x&0且x&0。下面我们分情况讨论:
1. x1&x2且y1&y2。这与|AB|&|AC|矛盾;
2. x1&x2且y1&y2。此时|BC|=x2-x1+y1-y2,|AC|-|BC|=x2+y2-x2+x1-y1+y2=x1-y1+2*y2。由前面各种关系可得y1&y2&x2&x1。假设|AC|&|BC|即y1&2*y2+x1,那么|AB|=x1+y1&2*x1+2*y2,|AC|=x2+y2&2*y2&|AB|与前提矛盾,故|AC|&|BC|;
3. x1&x2且y1&y2。与2同理;
4. x1&x2且y1&y2。此时显然有|AB|+|BC|=|AC|,即有|AC|&|BC|。
综上有|AC|&|BC|,也即在这个区域内只需选择距离A最近的点向A连边。
这种连边方式可以保证边数是O(N)的,那么如果能高效处理出这些边,就可以用Kruskal在O(NlogN)的时间内解决问题。下面我们就考虑怎样高效处理边。
我们只需考虑在一块区域内的点,其他区域内的点可以通过坐标变换&移动&到这个区域内。为了方便处理,我们考虑在y轴向右45度的区域。在某个点A(x0,y0)的这个区域内的点B(x1,y1)满足x1&x0且y1-x1&y0-x0。这里对于边界我们只取一边,但是操作中两边都取也无所谓。那么|AB|=y1-y0+x1-x0=(x1+y1)-(x0+y0)。在A的区域内距离A最近的点也即满足条件的点中x+y最小的点。因此我们可以将所有点按x坐标排序,再按y-x离散,用线段树或者树状数组维护大于当前点的y-x的最小的x+y对应的点。时间复杂度O(NlogN)。
至于坐标变换,一个比较好处理的方法是第一次直接做;第二次沿直线y=x翻转,即交换x和y坐标;第三次沿直线x=0翻转,即将x坐标取相反数;第四次再沿直线y=x翻转。注意只需要做4次,因为边是双向的。
至此,整个问题就可以在O(NlogN)的复杂度内解决了。
const int inf = 1e8;
const double eps = 1e-8;
const double pi = acos(-1.0);
inline bool rd(T &ret) {
if (c = getchar(), c == EOF) return 0;
while (c != '-' && (c&'0' || c&'9')) c = getchar();
sgn = (c == '-') ? -1 : 1;
ret = (c == '-') ? 0 : (c - '0');
while (c = getchar(), c &= '0'&&c &= '9') ret = ret * 10 + (c - '0');
inline void pt(T x) {
if (x &0) { putchar('-'); x = -x; }
if (x&9) pt(x / 10);
putchar(x % 10 + '0');
const int N = 1e5 + 10;
class MST{
struct Edge{
int from, to,
Edge(int _from = 0, int _to = 0, int _dis = 0) :from(_from), to(_to), dis(_dis){}
bool operator & (const Edge &x) const{
return dis & x.
}edge[N && 3];
int find(int x){ return x == f[x] ? x : f[x] = find(f[x]); }
bool Union(int x, int y){
x = find(x); y = find(y);
if (x == y)
if (x & y)swap(x, y);
void init(int n){
for (int i = 0; i &= i++)f[i] =
void add(int u, int v, int dis){
edge[tot++] = Edge(u, v, dis);
int work(){
sort(edge, edge + tot);
int cost = 0;
for (int i = 0; i & i++){
if (Union(edge[i].from, edge[i].to))
cost += edge[i].
int work_kth(int k){
sort(edge, edge + tot);
int cost = 0;
for (int i = 0; i & tot && i++){
if (Union(edge[i].from, edge[i].to))
cost = edge[i].dis, k--;
struct Point{
friend bool operator&(const Point&a, const Point&b){
if (a.x == b.x)return a.y & b.y;
return a.x & b.x;
class BIT{
int c[N], id[N],
int lowbit(int x){ return x&-x; }
void init(int n){
maxn = n + 10;
fill(c, c + maxn + 1, inf);
fill(id, id + maxn + 1, -1);
void updata(int pos, int val, int _id){
while (pos){
if (c[pos] & val){ c[pos] = id[pos] = _ }
pos -= lowbit(pos);
int query(int pos){
int val = inf, _id = -1;
while (pos &= maxn){
if (val & c[pos]){ val = c[pos]; _id = id[pos]; }
pos += lowbit(pos);
inline bool cmp(int *x, int *y){ return *x & *y; }
class Manhattan_MST{
int *po[N], a[N];
int work(int l, int r, int k){
mst.init(r);
for (int dir = 1; dir &= 4; dir++){
if (dir%2==0)for (int i = i &= i++)swap(p[i].x, p[i].y);
else if (dir == 3)for (int i = i &= i++)p[i].x = -p[i].x;
sort(p + l, p + r + 1);
for (int i = i &= ++i) a[i] = p[i].y - p[i].x, po[i] = &a[i];
sort(po + l, po + r + 1, cmp);
for (int i = i &= i++)*po[i] =
tree.init(r);
for (int i = i &= i--)
int id = tree.query(a[i]);
if (id != -1)
mst.add(p[i].id, p[id].id, abs(p[i].x - p[id].x) + abs(p[i].y - p[id].y));
tree.updata(a[i], p[i].x + p[i].y, i);
return mst.work_kth(k);
int main(){
rd(n); rd(k);
for (int i = 1; i &= i++)rd(p[i].x), rd(p[i].y), p[i].id =
pt(m_mst.work(1, n, n-k)); puts(&&);

我要回帖

更多关于 1 n整数中1出现的次数 的文章

 

随机推荐