codeforces 659 D. Bicycle Race

来源:互联网 发布:软件如何做授权加密 编辑:程序博客网 时间:2024/04/19 01:25

水水的想了半天,没想出方法。。
难道只有无脑码代码了吗。。
最后也只有无脑的码起来了。。
我的方法好笨的。。。
判断内点。
顺时针跑的话,逆时针转弯爆炸
逆时针跑,顺时针转弯爆炸。。

由第一条和最后一条路判断怎么跑。。(这是我昨天的想法,是错的orz)

然后和做过的同志一起发现,数据只有顺时针跑ORZ。。
今天在电路课上,随意画了一个城堡,然后发现有问题。。

其实并不用去想顺时针跑还是逆时针跑。。

1.内点的数量一定比外点少

2.只要是内点,无论逆时针还是顺时针跑,都会入水

3.内点的顺序于外点相反。。所以直接min就可以了(4.22更新)。。。

#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<algorithm>using namespace std;#define maxn 10010struct sb{    int x;    int y;}way[maxn];int dir[maxn];int main(){    int n;    cin>>n;    int cnt=0;    for(int i=1;i<=n+1;i++)    {        cin>>way[i].x>>way[i].y;    }    for(int i=2;i<=n+1;i++)    {        cnt++;        if(way[i-1].x==way[i].x)        {            if(way[i].y>way[i-1].y)            {                dir[cnt]=1;            }            else            {                dir[cnt]=2;            }        }        else        {            if(way[i-1].x>way[i].x)            {                dir[cnt]=3;            }            else            {                dir[cnt]=4;            }        }    }    int ans1=0,ans2=0;    int type=0;    //if((dir[1]==1&&dir[cnt]==4)||(dir[1]==2&&dir[cnt]==3)||(dir[1]==3&&dir[cnt]==1)||(dir[1]==4&&dir[cnt]==2))    //{    //    type=1;    //}    //1 shang 2xia 3zuo 4 you;    for(int i=1;i<cnt;i++)    {        if((dir[i]==1&&dir[i+1]==4)||(dir[i]==2&&dir[i+1]==3)||(dir[i]==3&&dir[i+1]==1)||(dir[i]==4&&dir[i+1]==2))        {            ans1++;        }        else if(dir[i]!=dir[i+1])            ans2++;    }    //if(type)      //  cout<<ans1<<endl;    //else     //   cout<<ans2<<endl;     cout<<min(ans1,ans2)<<endl;    //cout<<ans1<<" "<<ans2<<endl;    return 0;}
0 0
原创粉丝点击