zoukankan      html  css  js  c++  java
  • Codeforces 294D

    294D - Shaass and Painter Robot

    思路:

    可以用数学归纳法证明一个结论:整个棋盘黑白相间当且仅当边缘黑白相间。

    分奇偶讨论又可得出边缘黑色格个数为n+m-2

    这样就可以暴力模拟。

    数组开不下保存边缘块有没有被访问,可以用map。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pb push_back
    #define mem(a,b) memset(a,b,sizeof(a))
    
    const int N=1e5+5;
    const int INF=0x3f3f3f3f;
    map<int,int>mp[N];
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        int x,y,n,m,dx,dy;
        string s;
        cin>>n>>m>>x>>y;
        cin>>s;
        if(s[0]=='U')dx=-1;
        else dx=1;
        if(s[1]=='L')dy=-1;
        else dy=1;
        int tot=n+m-2;
        int cnt=0;
        ll ans=1;//原来的一格不要忘记
        if(x==1||x==n||y==1||y==m){
                tot--;
                mp[x][y]=1;
        }
        while(true){
            cnt++;
            if(cnt>=5e5)return 0*puts("-1");
            int dis=INF;
            if(dx==1)dis=min(dis,n-x);
            else dis=min(dis,x-1);
            if(dy==1)dis=min(dis,m-y);
            else dis=min(dis,y-1);
            ans+=dis;
            x+=dx*dis;
            y+=dy*dis;
            if(x==1)dx=1;
            else if(x==n)dx=-1;
            if(y==1)dy=1;
            else if(y==m)dy=-1;
            if(!mp[x][y]){
                tot--;
                mp[x][y]=1;
            }
            if(!tot){
                cout<<ans<<endl;
                return 0;
            }
        }
        return 0;
    }
  • 相关阅读:
    Java中的Date类型无法赋值给数据库的datetime类型
    在HTML中改变input标签中的内容
    sizeof计算类的大小
    UML类图,转载
    大端小段详解—转载
    leetcode练习
    linux基础
    排序算法和查找算法

    链表
  • 原文地址:https://www.cnblogs.com/widsom/p/8350217.html
Copyright © 2011-2022 走看看