【几何+暴力】-CF-391D1-Supercollider

2024-09-03 22:18

本文主要是介绍【几何+暴力】-CF-391D1-Supercollider,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:http://codeforces.com/problemset/problem/391/D1

题目描述:给出若干条平面上线段,找出最大的正“+”形边长多少?

解题思路:

不难,但是判断两直线相交要考虑全面。数据不大不多,暴力直接过了。

AC代码:

 #include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
using namespace std;
typedef struct line
{
int sx,sy;
int ex,ey;
};
int N,M;
line xl[1200],yl[1200];
int ans[1002000],r[5];
int deal(int x)
{
if(x>=0)
return x;
return -x;
}
int iscross(line ping,line shu)
{
if(ping.sy>shu.ey&&ping.sy<shu.sy||ping.sy<shu.ey&&ping.sy>shu.sy)
{
if(shu.sx<ping.sx&&shu.sx>ping.ex||shu.sx>ping.sx&&shu.sx<ping.ex)
return 1;
}
return 0;
}
int main()
{
//freopen("d1_input.txt","r",stdin);
int i,j,len,q=-1,k;
memset(ans,0,sizeof(ans));
cin>>N>>M;
for(i=0;i<N;i++)
{
cin>>yl[i].sx>>yl[i].sy>>len;
yl[i].ex=yl[i].sx;
yl[i].ey=yl[i].sy+len;
}
for(i=0;i<M;i++)
{
cin>>xl[i].sx>>xl[i].sy>>len;
xl[i].ex=xl[i].sx+len;
xl[i].ey=xl[i].sy;
}
/*
for(i=0;i<N;i++)
cout<<yl[i].sx<<" "<<yl[i].sy<<" "<<yl[i].ex<<" "<<yl[i].ey<<endl;
for(i=0;i<M;i++)
cout<<xl[i].sx<<" "<<xl[i].sy<<" "<<xl[i].ex<<" "<<xl[i].ey<<endl;
*/
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
if(iscross(xl[i],yl[j]))
{
int x=yl[j].sx;
int y=xl[i].sy;
//cout<<x<<" "<<y<<endl;
r[1]=deal(x-xl[i].sx);
r[2]=deal(x-xl[i].ex);
r[3]=deal(y-yl[j].sy);
r[4]=deal(y-yl[j].ey);
ans[++q]=r[1];
for(k=2;k<=4;k++)
ans[q]=min(ans[q],r[k]);
//cout<<ans[q]<<endl;
}
}
}
int maximum=0;
for(i=0;i<=q;i++)
maximum=max(ans[i],maximum);
cout<<maximum<<endl;
return 0;
}
AC截图:


这篇关于【几何+暴力】-CF-391D1-Supercollider的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134202

相关文章

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

poj 3304 几何

题目大意:给出n条线段两个端点的坐标,问所有线段投影到一条直线上,如果这些所有投影至少相交于一点就输出Yes!,否则输出No!。 解题思路:如果存在这样的直线,过投影相交点(或投影相交区域中的点)作直线的垂线,该垂线(也是直线)必定与每条线段相交,问题转化为问是否存在一条直线和所有线段相交。 若存在一条直线与所有线段相交,此时该直线必定经过这些线段的某两个端点,所以枚举任意两个端点即可。

POJ 2318 几何 POJ 2398

给出0 , 1 , 2 ... n 个盒子, 和m个点, 统计每个盒子里面的点的个数。 const double eps = 1e-10 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;}struct Point{double x , y

poj 2653 几何

按顺序给一系列的线段,问最终哪些线段处在顶端(俯视图是完整的)。 const double eps = 1e-10 ;double add(double x , double y){if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;return x + y ;}struct Point{double x , y ;Point(){}Po

cf 164 C 费用流

给你n个任务,k个机器,n个任务的起始时间,持续时间,完成任务的获利 每个机器可以完成任何一项任务,但是同一时刻只能完成一项任务,一旦某台机器在完成某项任务时,直到任务结束,这台机器都不能去做其他任务 最后问你当获利最大时,应该安排那些机器工作,即输出方案 具体建图方法: 新建源汇S T‘ 对任务按照起始时间s按升序排序 拆点: u 向 u'连一条边 容量为 1 费用为 -c,

CF 508C

点击打开链接 import java.util.Arrays;import java.util.Scanner;public class Main {public static void main(String [] args){new Solve().run() ;} }class Solve{int bit[] = new int[608] ;int l

计蒜客 Half-consecutive Numbers 暴力打表找规律

The numbers 11, 33, 66, 1010, 1515, 2121, 2828, 3636, 4545 and t_i=\frac{1}{2}i(i+1)t​i​​=​2​​1​​i(i+1), are called half-consecutive. For given NN, find the smallest rr which is no smaller than NN