SRM 538 div2

  客观原因很多,但我不想找了。水平在那摆着。。。。以后做比赛尽量找一个安静的点环境,比如实验室。昨晚一题没做出来,今天回头又翻了翻

300pt:

其实是道水题,很水很水的题。。。先统计出L,R所能到达的最远位置。然后把'?'补给大的。如果dis(L) = dis(R) 则补给第一个出现的。

View Code
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>

using namespace std;


class LeftOrRight {
public:
int maxDistance(string p) {
int t = 0, mw = 0, fir = -1, ml = 0, mr = 0;
int i, n = p.size();
for(i = 0; i < n; ++i) {
if(p[i] == 'L') {
if(fir == -1) fir = 0;
t--;
ml = min(ml, t);
} else if(p[i] == 'R') {
if(fir == -1) fir = 1;
t++;
mr = max(ml, t);
} else if(p[i] == '?') {
mw ++;
}
}
ml *= -1;
if(ml == mr) {
if(fir == 0) return ml + mw;
else return mr + mw;
}
return max(ml, mr) + mw;
}
};

500pt

zjut_DD大神的证明:如果只有上下左右四个方向可走的话,从某点出发到外面绕一圈回来,总路程一定是偶数。那么根据题目的意思,如果结束的时候还走到原点(0,0)的话,就是一个圈了。那么就只需要枚举那条缺失的路。

所以关键代码只有两行:

for(i = 0; i < x.size(); ++i)    if((abs(x[i] + y[i])%2) == wantParty)   return "CAN";
return "CANNOT";


1000pt

求教。还是那么的弱。。。T_T


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值