zoukankan      html  css  js  c++  java
  • codeforces 1100D-Dasha and Chess

    传送门:QAQQAQ

    题意:This is an interactive task.  

    999*999国际象棋棋盘中有一个王和666个车,玩家走王,电脑走车,玩家先走,玩家的目的是让对方的车将到自己的王,电脑的车可以“飞”(即移动到棋盘上任意一点),但吃子规则不变,玩家必须要在2000步之内获胜

    思路:哇塞这是国际象棋!好激动好激动!(然而没做出来)

    我们考虑一般情况:根据王的位置一横一竖把棋盘分成4个部分,加入王往一个方向走(这里假设往左上走),则除了背对他的方向其它所有车都要闪开(即左上,右上,左下)

    假如我们从左上角开始赶车:有666个车要被赶走,王走到右下角(即把车赶光)要998步,太多了;

    那么如果王在最中间呢?——最少的一个方向最多也就166个,也就是王在中间背对车个数最少的方向走最少也可以赶走500个车,而王走到最底下只要499步——有2个车来不及闪开了

    所以我们先把王移到正中间,再背对车个数最少的方向逼近就行了

    活生生打成了码农题(200多行,有很多函数是多余的),一直说越界(其实电脑骗人,只要wronganswer就说越界),加了很多特判,结果发现把王的位置也读入的时候mp赋值为1了

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int inf=200000000;
    int dx[]={-1,-1,1,1};
    int dy[]={-1,1,-1,1};
     
    struct node{
        int x,y;
    }a[667];
    int mp[1020][1020];
     
    void init()
    {
        memset(mp,0,sizeof(mp));
        for(int i=0;i<=666;i++) 
        {
            scanf("%d%d",&a[i].x,&a[i].y);
            if (i) mp[a[i].x][a[i].y]++;//之前没判i!=0
        }
    }
     
    void print()
    {
        printf("%d %d
    ",a[0].x,a[0].y);
        fflush(stdout);
    }
     
    void up()
    {
        a[0].x--;
        print();
    }
     
    void down()
    {
        a[0].x++;
        print();
    }
     
    void left()
    {
        a[0].y--;
        print();
    }
     
    void right()
    {
        a[0].y++;
        print();
    } 
     
    void leftup()
    {
        if(mp[a[0].x-1][a[0].y-1]) 
        {
            up();
            return;
        }
        a[0].x--; a[0].y--;
        print();
    }
     
    void leftdown()
    {
        if(mp[a[0].x+1][a[0].y-1]) 
        {
            down();
            return;
        }
        a[0].x++; a[0].y--;
        print();
    }
     
    void rightdown()
    {
        if(mp[a[0].x+1][a[0].y+1]) 
        {
            down();
            return;
        }
        a[0].x++; a[0].y++;
        print();
    }
     
    void rightup() 
    {
        if(mp[a[0].x-1][a[0].y+1]) 
        {
            up();
            return;
        }
        a[0].x--; a[0].y++;
        print();
    }
     
    void read()
    {
        int id,xx,yy;
        scanf("%d%d%d",&id,&xx,&yy);
        if(id==-1) 
        {
            exit(0);
        }
        mp[a[id].x][a[id].y]--;
        a[id].x=xx; a[id].y=yy;
        mp[a[id].x][a[id].y]++;
    }
     
    void ready()
    {
        while(a[0].x<500)
        {
            down();
            read();
        }
        while(a[0].x>500)
        {
            up();
            read();
        }
        while(a[0].y>500)
        {
            left();
            read();
        }
        while(a[0].y<500)
        {
            right();
            read();
        }
    }
     
    int dir,minn=inf,tmp;
    void judge_direction()
    {
        int cnt[4]={0,0,0,0};//0:leftup 1:rightup 2:leftdown 3:rightdown
        for(int i=1;i<=999;i++)
        {
            for(int j=1;j<=999;j++)
            {
                if(i<500)
                {
                    if(j<500) cnt[0]+=mp[i][j];
                    if(j>500) cnt[1]+=mp[i][j];
                } 
                if(i>500)
                {
                    if(j<500) cnt[2]+=mp[i][j];
                    if(j>500) cnt[3]+=mp[i][j];
                }
            }
        }
        for(int i=0;i<4;i++)
        {
            if(minn>cnt[i]) minn=cnt[i],tmp=i;
        }
        dir=3-tmp;
    }
     
    void move(int dir)
    {
        if(dir==0) leftup();
        else if(dir==1) rightup();
        else if(dir==2) leftdown();
        else rightdown();
    }
     
    void solve()
    {
        while(1)
        {
            move(dir);
            read();
        }
    }
     
    int main()
    {
        init();
        ready();
        judge_direction();
        solve();
        return 0;
    }
    View Code
  • 相关阅读:
    python数据分析与展示
    人生苦短,我学python。
    数学
    解决git for windows 和 vim for windows 的 vim 显示中文乱码的问题
    解决win7连接IPsec报错789和809错误
    python安装pandas库
    vim配置文件
    0x03-数据和C
    Ubutun安装问题记录
    Django-rest-framework --- 三大认证
  • 原文地址:https://www.cnblogs.com/Forever-666/p/11235148.html
Copyright © 2011-2022 走看看