1. 程式人生 > >Educational Codeforces Round 53 (Rated for Div. 2)-C. Vasya and Robot

Educational Codeforces Round 53 (Rated for Div. 2)-C. Vasya and Robot

思路:一開始做思路就錯了,我考慮的是如何轉變方向使其有效到達目標位置,但是比較複雜。這題要求更改的區間最小長度。因此可以二分割槽間長度,在遍歷左端點看是否存在即可。判斷存在,即更改的區間的個數是否能將其他區域的缺少或多餘步驟給消掉即可。

Code:

#include<iostream>
#include<vector>
#include<cmath>
using namespace std;

const int MAX_N=2e5+5;
int n;
int x0,y0;
string str;
int px[MAX_N],py[MAX_N];

bool judge(int l,int r);
int main()
{
	ios::sync_with_stdio(false);
	while(cin>>n){
		cin>>str;
		cin>>x0>>y0;
		for(int i=0;i<n;++i)
			if(str[i]=='U') py[i+1]=py[i]+1,px[i+1]=px[i];
			else	if(str[i]=='D')	py[i+1]=py[i]-1,px[i+1]=px[i];
			else	if(str[i]=='L')	px[i+1]=px[i]-1,py[i+1]=py[i];
			else	if(str[i]=='R')	px[i+1]=px[i]+1,py[i+1]=py[i];
		int l=0,r=n,h;
		while(l<=r){
			h=(l+r)/2;
			bool boo=false;
			for(int i=1;i+h-1<=n;++i)
				if(judge(i,i+h-1)){
					boo=true;	break;
				}
			if(boo)	r=h-1;
			else	l=h+1;
		}
		if(l>n)	l=-1;
		cout<<l<<endl;
	}
	
	return 0;
}

bool judge(int l,int r)
{
	bool boo=true;
	int xi=px[l-1]+px[n]-px[r];
	int yi=py[l-1]+py[n]-py[r];
	int s0=abs(xi-x0)+abs(yi-y0),si=r-l+1;
	if(si<s0||(si-s0)%2)	boo=false;
	return boo;
}

相關推薦

Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot 【二分 + 尺取】

任意門:http://codeforces.com/contest/1073/problem/C C. Vasya and Robot time limit per test 1 second memory limit per test

Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot(二分+模擬)

題目連結 題意 一個二維平面上有個機器人初始在 ( 0 ,

Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot 二分+前後綴預處理

題意: 給定長度為n的字串,每個字元表示朝上下左右四個方向前進,給定一個目標位置,找一個最小的區間,使得改變這個區間的若干個字元,使得整個串的操作能到達目標位置只需要輸出最小區間長度 思路: 首先暴力的想法就是列舉所有的區間,這樣這個區間兩邊就會有一些操作不會改變,然後我們根據這些操

Educational Codeforces Round 53 (Rated for Div. 2)-C. Vasya and Robot】二分

Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot 題意 在 二

Educational Codeforces Round 53 (Rated for Div. 2)-C. Vasya and Robot

思路:一開始做思路就錯了,我考慮的是如何轉變方向使其有效到達目標位置,但是比較複雜。這題要求更改的區間最小長度。因此可以二分割槽間長度,在遍歷左端點看是否存在即可。判斷存在,即更改的區間的個數是否能將其他區域的缺少或多餘步驟給消掉即可。 Code: #includ

Educational Codeforces Round 54 (Rated for Div. 2) E. Vasya and a Tree(dfs+思維)

E. Vasya and a Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output

Educational Codeforces Round 55 (Rated for Div. 2) A - Vasya and Book

傳送門 https://www.cnblogs.com/violet-acmer/p/10035971.html   題意:   一本書有n頁,每次只能翻 d 頁,問從x頁到y頁需要翻動幾次?   注意:往前翻最少翻到第1頁,往後翻最多翻到n頁。 題解:   一開始想找規律來著,emm

Educational Codeforces Round 52 (Rated for Div. 2)B. Vasya and Isolated Vertices·「模擬,思維」

B. Vasya and Isolated Vertices time limit per test 1 second memory limit per test 256 megabytes input standard input output standard o

Educational Codeforces Round 51 (Rated for Div. 2).A. Vasya And Password(模擬)

A. Vasya And Password time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output

Educational Codeforces Round 51 (Rated for Div. 2)E. Vasya and Big Integers(二分雜湊+差分)

題目傳送門 題意   給出長度小於等於10610^6106的數字串a,l,r,求把串a拆分後,每段數字大小都是≥l\geq l≥l並且≤r\leq r≤r的方案有多少種。 分析   首先我們可以發現一個很顯然的結論,即如果從第i位開始截成一段,那麼這一

Educational Codeforces Round 52 (Rated for Div. 2) B. Vasya and Isolated Vertices

題解 題目大意 給你n個點使用m條邊組成一個圖 問你最多和最小能有多少個孤立節點(度為0) 最少的點個數就是每個邊連兩個點m-n2和0取max 最多的點計算d(d-1)=m*2用n-d 需要特判0 AC程式碼 #include <stdio.h> #

Educational Codeforces Round 56 (Rated for Div. 2) C - Mishka and the Last Exam(貪心/差分約束)

題意 給一個n,一個序列b[], bi=ai+a(n+i-1), 求不降序的a序列[] 思路來源 組裡各神犇&&自己 題解 Solution1: 顯然a1=0,an=b1的時候,區間長度最長 區間裡面內建區間的時候如果內區間能左對齊,顯

Educational Codeforces Round 54 (Rated for Div. 2) E. Vasya and a Tree】 dfs+樹狀陣列

HEU 大三蒟蒻一枚 有任何問題或建議都可以加Q聯絡我^_^ QQ : 986195894 CodeForces id : lajiyuan CodeForces id : biubiubiu_ Vjudge id : heu2016201206

Educational Codeforces Round 53 (Rated for Div. 2)

space iostream ace ted color 代碼 ces pan else A. Diverse Substring(前綴和) 題意:給一個字符串,找出一個子串滿足該子串中每個字母出現的次數不超過子串的長度/2,字符串的長度n<1000. 題解:n方枚舉

Educational Codeforces Round 53 (Rated for Div. 2) D. Berland Fair

題意:一個人  有T塊錢 有一圈商店 分別出售 不同價格的東西  每次經過商店只能買一個  並且如果錢夠就必須買  這個人一定是從1號店開始的!(比賽的時候讀錯了題,以為隨意起點。。。)問可以買多少個 思路:這個人有T塊錢  走一圈之後可以買num個 花了

Educational Codeforces Round 53 (Rated for Div. 2)D. Berland Fair(貪心)

題目連結 題意 有 n n n個物品圍成一圈,每個物品都有一個價值

Educational Codeforces Round 53 (Rated for Div. 2) E. Segment Sum

https://codeforces.com/contest/1073/problem/E 題意 求出l到r之間的符合要求的數之和,結果取模998244353 要求:組成數的數位所用的數字種類不超過k種 思路 這題一看就是個數位dp的模板題,但是由於以前沒有完全理解數位dp加上xjb套模版,導致樣例都

E. Segment Sum (數位dp)Educational Codeforces Round 53 (Rated for Div. 2)

題目連結:http://codeforces.com/contest/1073/problem/E 參考連結:https://blog.csdn.net/qq_38677814/article/details/83415782 題意:給出l,r,k,在範圍 [ l , r ] 內找出數字