CodeForces 575D Tablecity 奇偶分析

首先这个题目的要求是:找到一种监测方法,使得所有小偷移动序列中 一定会有至少 一个时间点 在 一个地点 与之重合。


这个题可不能从左往右扫一遍,因为即使只这样,小偷也会跑过去。

/*

我们先试着确定小偷的范围,将其渐渐逼死,结果很没有头绪,因为这样的小偷是"万能",即出生位置可以不断调整来始终破坏这个策略。


但这样分析是不对的,因为小偷只可能有一个出生位置。*/


解法:

从左往右扫列,再从右往左扫列。


2000步,即可抓住。


因为:

小偷之所以能“迎面逃走”,是因为小偷所在列的奇偶性和查看的列不同。

如果两者相同,绝不可能迎面逃走。


所以如果小偷出生在奇数列,你第一遍从左往右扫,那么扫到第1000列之前,一定能抓住他,因为每次都是同奇偶。


如果小偷出生在偶数列,第一次从左往右抓不到他,但是1001次,你监测1000列,你在偶数列,他也在偶数列,

现在从右往左扫,因为你们每步同奇偶,所以一定能在2000步之前抓住他。除非他每次能走2列,但那不可能,因为

那就像他长了翅膀会飞一样。




#include<bits/stdc++.h>
using namespace std;

#define all(x) (x).begin(), (x).end()
#define for0(a, n) for (int (a) = 0; (a) < (n); (a)++)
#define for1(a, n) for (int (a) = 1; (a) <= (n); (a)++)
typedef long long ll;
typedef pair<int, int> pii;
const int INF =0x3f3f3f3f;
const int n=1000    ;
int main()
{
    printf("2000\n");
     for(int x=1;x<=n;x++)
     {
        printf("%d %d %d %d\n",x,1,x,2);
     }
        for(int x=n;x>=1;x--)
     {
        printf("%d %d %d %d\n",x,1,x,2);
     }
   return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值