codeforces 712B. Memory and Trident

题目链接:http://codeforces.com/problemset/problem/712/B

题目大意:

  给出一个字符串(由‘U‘‘D‘‘L‘‘R‘),分别是向上、向下、向左、向右一个单位,问修改若干字符,可以回到原点。回不到原点输出 -1,可以则输出最少修改的步数。

解题思路:

  如果是奇数步,则不可以回到原点 直接输出-1;

  否则:分别统计出向各个方向的步数,求出 abs(U-D)+abs(L-R) 回不到原点多余的步数。然后让 剩余的步数/2 修改一处可以保证两个状态OK.(例如:DRUR=>DRUL,修改了最后一个R为L,不仅保证了RL,而且取消了了本身对应的L,故修改一处即可)。

AC Code:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 int main()
 5 {
 6     string s;
 7     int a[4];
 8     while(cin>>s)
 9     {
10         memset(a,0,sizeof(a));
11         for(int i=0; i<s.size(); i++)
12         {
13             if(s[i]==‘L‘)a[0]++;
14             if(s[i]==‘R‘)a[1]++;
15             if(s[i]==‘U‘)a[2]++;
16             if(s[i]==‘D‘)a[3]++;
17         }
18         if(s.size()%2)
19             printf("-1\n");
20         else printf("%d\n",(abs(a[0]-a[1])+abs(a[2]-a[3]))/2);
21     }
22     return 0;
23 }
时间: 2024-10-20 08:22:01

codeforces 712B. Memory and Trident的相关文章

CodeForces 712B Memory and Trident (水题,暴力)

题意:给定一个序列表示飞机要向哪个方向飞一个单位,让你改最少的方向,使得回到原点. 析:一个很简单的题,把最后的位置记录一下,然后要改的就是横坐标和纵坐标绝对值之和的一半. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cmath>

Codeforces 309C Memory for Arrays 二进制模拟进位

题目链接:点击打开链接 题意: 给定n个箱子m个物品 下面n个数字表示箱子的容量 下面m个数字b1-bm 表示物品体积为2^bi大 问最多有多少个物品可以放入箱子. 思路: 贪心,先放小的,小的不能放再放大的 显然我们把n个箱子拆成二进制,然后模拟二进制减法运算. 剩下就是简单模拟 #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<m

Memory and Trident(CodeForces 712B)

Description Memory is performing a walk on the two-dimensional plane, starting at the origin. He is given a string s with his directions for motion: An 'L' indicates he should move one unit left. An 'R' indicates he should move one unit right. A 'U'

codeforces 712A. Memory and Crow

题目链接:http://codeforces.com/problemset/problem/712/A 题目大意: 给你一个数字系列,求其满足条件的一个序列. 条件为: ai = bi - bi + 1 + bi + 2 - bi + 3.... 解题思路: 可先从后向前推,b[n]=a[n](1-n个数); b[i]=a[i]+b[i+1]-b[i+1]... 然而,你可以发现b[i]=a[i]+a[i+1],一个a数组即可解决问题. AC Code: [切记暴力不好使,还是泪奔0.0,最近感

Codeforces 712C Memory and De-Evolution(逆向思维)

题目链接:http://codeforces.com/problemset/problem/712/C 题意:有一个长度为 x 的等边三角形,你每次可以选择一条边减少其长度,当然减少之后,三条边仍然可以组成一个三角形. 最后要使其变成程度为 y ,的等边三角形(x > y),问要作几次操作. 思路:贪心即可,可是重点是反着贪,长度为 y 的等边三角形,每次增加一条边的长度使其变成长度为 x 的等边三角形. 如果正着贪心,一条边太短的话,很影响其他边变短的过程,总次数也不一定是最优. 代码: #i

Codeforces 712C. Memory and De-Evolution

题目链接:http://codeforces.com/problemset/problem/712/C 题意: 给你两个值 a 和 b (a > b), 代表这里有两个等边三角形, 边长分别为 a 和 b, 你可以对边长为 a 的三角形进行变换, 每次变化你可以选择一条边, 并为其重新指定一个长度, 当然变换完成后还能组成一个三角形.问最少经过多少次变换可以把等边三角形的三边长度从 a 变换到 b. 思路: 题目中的意思时从大的三角形变换到小的三角形,这里可以换一种方式,即 “最少经过多少次变换

CodeForces 712D Memory and Scores

#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<set> #include<queue> #include&

[CodeForces - 712D]Memory and Scores (DP 或者 生成函数)

题目大意: 两个人玩取数游戏,第一个人分数一开始是a,第二个分数一开始是b,接下来t轮,每轮两人都选择一个[-k,k]范围内的整数,加到自己的分数里,求有多少种情况使得t轮结束后a的分数比b高.  (1 ≤ a, b ≤ 100, 1 ≤ k ≤ 1000, 1 ≤ t ≤ 100) 1.我一开始的想法是DP出玩i轮得分是j的方案数.然后状态数最多有t*(2*k*t)那么多,最坏情况下会有2e7那么多的状态,转移必须是O(1)的. dp[i][j]=sum(dp[i-1][j-k....j+k]

ECJTUACM16 Winter vacation training #4 题解&amp;源码

https://vjudge.net/contest/149692#overview 这周一VJ比赛,题解&源码已完成! A......................................................................................... 题目链接→Codeforces Problem 712A Memory and Crow [题意]有n个数b1,?b2,?...,?bn a1,?a2,?...,?an是通过等式ai?=?bi?-