水题记录

HDU 4156

HDU 4156
勾股定理

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

int main()
{
    int a[4];
    while(scanf("%d %d %d",&a[0],&a[1],&a[2]))
    {
        if(a[0]==a[1]&&a[1]==a[2]&&a[1]==0)
            break;
        else{
            sort(a,a+3);
        if(a[2]*a[2]==a[1]*a[1]+a[0]*a[0])
            printf("right\n");
        else printf("wrong\n");
        }
    }
    return 0;
}

POJ 1269

POJ 1269
一道套kuangbin模板的题

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <map>
#include <vector>
#include <set>
#include <string>
#include <math.h>
using namespace std;

const double eps=1e-8;
int sgn(double x)
{
    if(fabs(x)<eps) return 0;//x==0时
    if(x<0) return -1;
    else return 1;
}
struct point
{
    double x,y;
    point(){}
    point(double _x,double _y)
    {
        x=_x;y=_y;
    }
    point operator -(const point &b)const//求直线向量 
    {
        return point(x-b.x,y-b.y);
    }
    double operator^(const point &b)const
    {
        return x*b.y-y*b.x;//叉乘
    }
    double operator*(const point &b)const
    {
        return x*b.x-y*b.y;//点乘
    }
};
struct line
{
    point s,e;
    line(){};
    line(point _s,point _e)
    {
        s=_s;e=_e;
    }
    pair<int,point> operator&(const line&b)const
    {
        point res=s;
        if(sgn((s-e)^(b.s-b.e))==0)//叉乘=0说明直线平行或者重合
        {
            if((sgn((s-b.e)^(b.s-b.e))==0))//求平行四边形面积,如果面积为0,则直线重合
                return make_pair(0,res);
            else return make_pair(1,res);
        }
            double t=((s-b.s)^(b.s-b.e))/((s-e)^(b.s-b.e));
            res.x += (e.x-s.x)*t;
            res.y += (e.y-s.y)*t;
            return make_pair(2,res);//利用相似三角形的性质,求出两条直线的交点
    }
};//pair可以将两个数据合成一个数据,make_pair可以直接生成pair变量

int main()
{
    int n;
    scanf("%d",&n);
    double x1,x2,x3,x4,y1,y2,y3,y4;
    printf("INTERSECTING LINES OUTPUT\n");
    for(int i=0;i<n;i++)
    {
        scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
        line p1(point(x1,y1),point(x2,y2)),
             p2(point(x3,y3),point(x4,y4));
            pair<int,point> c=p1&p2;
            if(c.first==0)
                printf("LINE\n");
            else if(c.first==1)
                printf("NONE\n");
            else
            printf("POINT %.2f %.2f\n",c.second.x,c.second.y);
    }
    printf("END OF OUTPUT\n");
    return 0;
}

POJ 1410

POJ 1410
依旧套模板,判断线段和图形有没有交点,可以分为以下几种情况:
1、如果线段至少一个端点在图形内,即有交点
2、如果两个端点都不在图形内,如果线段和图形要有交点,线段一定是穿过图形的边界的,即一定与图形的边界有交点
又因为题目里的图形规定好了是矩形,所以判断点是否在矩形内就非常容易

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <map>
#include <vector>
#include <set>
#include <string>
#include <math.h>
using namespace std;

const double eps=1e-8;
int sgn(double x)
{
    if(fabs(x)<eps) return 0;//x==0时
    if(x<0) return -1;
    else return 1;
}
struct point
{
    double x,y;
    point(){}
    point(double _x,double _y)
    {
        x=_x;y=_y;
    }
    point operator -(const point &b)const
    {
        return point(x-b.x,y-b.y);
    }
    double operator^(const point &b)const
    {
        return x*b.y-y*b.x;//叉乘
    }
    double operator*(const point &b)const
    {
        return x*b.x-y*b.y;//叉乘
    }
};

struct line
{
    point s,e;
    line(){};
    line(point _s,point _e)
    {
        s=_s;e=_e;
    }

};

bool inter(line l1,line l2)
{
    return
    max(l1.s.x,l1.e.x) >= min(l2.s.x,l2.e.x) &&
    max(l2.s.x,l2.e.x) >= min(l1.s.x,l1.e.x) &&
    max(l1.s.y,l1.e.y) >= min(l2.s.y,l2.e.y) &&
    max(l2.s.y,l2.e.y) >= min(l1.s.y,l1.e.y) &&
    sgn((l2.s-l1.e)^(l1.s-l1.e))*sgn((l2.e-l1.e)^(l1.s-l1.e)) <= 0 &&
    sgn((l1.s-l2.e)^(l2.s-l2.e))*sgn((l1.e-l2.e)^(l2.s-l2.e)) <= 0;
}

int main()
{
    int n;
    scanf("%d",&n);
    int x1,x2,x3,x4,y1,y2,y3,y4;
    for(int i=0;i<n;i++)
    {
        scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
        line line1(point(x1,y1),point(x2,y2)),
             line2(point(x3,y3),point(x4,y3)),
             line3(point(x4,y3),point(x4,y4)),
             line4(point(x3,y4),point(x4,y4)),
             line5(point(x3,y3),point(x3,y4));
        if ((x1<=max(x3,x4)&&x1>=min(x3,x4)&&y1<=max(y3,y4)&&y1>=min(y3,y4))
            &&(x2<=max(x3,x4)&&x2>=min(x3,x4)&&y2<=max(y3,y4)&&y2>=min(y3,y4)))
        {
            printf("T\n");
        }
        else if(inter(line1,line2)||inter(line1,line3)||inter(line1,line4)||inter(line1,line5))
        {
            printf("T\n");
        }
        else{
            printf("F\n");
        }
    }
    return 0;
}

POJ 2386

POJ 2386
用scanf输入char类型的时候

记 得 g e t c h a r!

#include <iostream>
#include <cstdio>
using namespace std;

int n,m,ans=0;
char a[110][110];

void dfs(int x,int y)
{
    a[x][y]='.';
    for(int i=-1;i<2;i++){
        for(int j=-1;j<2;j++)
    {
        int mm,nn;
        nn=x+i,mm=y+j;
        if(mm<m&&mm>=0&&nn<n&&nn>=0&&a[nn][mm]=='W'){
            dfs(nn,mm);
        }
    }}
    return;
}


int main()
{
    ans=0;
    scanf("%d %d",&n,&m);
    getchar();
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++)
        scanf("%c",&a[i][j]);
        getchar();}
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++)
        {
            if(a[i][j]=='W'){
            dfs(i,j);
            ans++;
            }
        }}
    printf("%d\n",ans);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值