思维题g7

开始感觉看感觉很简单,结果wa了很久,最后想到感觉还是很好的思维题

开始我是打算将l,u一组,r,d一组

后来改成l,r一组,d,u一组求差就过了。。。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <cmath>
#include <vector>
#define inf 1e9+10
using namespace std;
const int maxn=100010;
typedef long long ll;
string s;
int cnt1,cnt2,cnt3,cnt4,ans;
int main()
{
	cin>>s; 
	if(s.length()%2){
		cout<<-1<<endl;
		return 0;
	}
	for(int i=0;i<s.length();i++){
		if(s[i]=='L') cnt1++;
		if(s[i]=='U') cnt2++;
		if(s[i]=='R') cnt3++;
		if(s[i]=='D') cnt4++;
	}
	int res1=abs(cnt1-cnt3);
	int res2=abs(cnt2-cnt4);
	ans+=min(res1,res2);//核心,从更大到更小转移
	ans+=(max(res2,res1)-min(res1,res2))/2;//更大的剩余转移,此时差的变化不一样
 	cout<<ans<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43916947/article/details/86182193