B. Draw!--简单思维题--Codeforces Round #541 (Div. 2)

Draw!

time limit per test 2 seconds
memory limit per test 256 megabytes

题目链接http://codeforces.com/contest/1131/problem/B

B. Draw!--简单思维题--Codeforces Round #541 (Div. 2)
B. Draw!--简单思维题--Codeforces Round #541 (Div. 2)


说实在的这题做了很久,WA了很多次WA4的2发,WA8的4发。。。思维不够严谨造成了各种漏洞。。。

题目大意:给你n个分数比,最后一个是最终的分数比,让你求中间有多少场平局。

看起来挺简单的,最初就直接:

#include <bits/stdc++.h>
using namespace std;
const int mac=1e4+10;
int a[mac],b[mac];
int main()
{
	int n;
	scanf ("%d",&n);
	for (int i=1; i<=n; i++){
		scanf ("%d%d",&a[i],&b[i]);
	}
	int ans=1;
	for (int i=1; i<=n; i++){
		ans+=min(a[i]-a[i-1],b[i]-b[i-1]);
	}
	printf ("%d\n",ans);
	return 0;
}

然后就WA4了,对于这份代码,漏洞很多。。。后来就改成区间的判断:

if (c[sta].a>c[sta].b) {
	if (c[end].a<=c[end].b) return c[end].a-c[sta].a+1-mak;
	else return c[end].b-c[sta].a+1-mak;
} 
else {
	if (c[end].a<=c[end].b) return c[end].a-c[sta].b+1-mak;
	else return c[end].b-c[sta].b+1-mak;
}

其中sta是上一个的值,end就是当前的值。这还不够,对于各种鬼畜的数据,比如重复的我们要删掉:

if (c[sta].a==c[end].a && c[end].b==c[sta].b) return 0;

但如果它的数据全是0的话又得重新判断:

if (c[n].a==0 && c[n].b==0) ans=1;
else ans=0;

如果只是这样话还是WA8的,还有一种情况就是区间无法相互覆盖的情况:

if (c[sta].a>c[end].b) return 0;
if (c[sta].b>c[end].a) return 0;

以下是AC代码:

#include <bits/stdc++.h>
using namespace std;
const int mac=1e4+10;
struct node 
{
	int a,b;
}c[mac];
#define ll long long
int judge(int sta,int end)
{
	int mak=0;
	if (c[sta].a==c[end].a && c[end].b==c[sta].b) return 0;
	if (c[sta].a>c[end].b) return 0;
	if (c[sta].b>c[end].a) return 0;
	if (c[sta].a==c[sta].b && c[sta].a!=0) mak=1;
	if (c[sta].a>c[sta].b){
		if (c[end].a<=c[end].b) return c[end].a-c[sta].a+1-mak;
		else return c[end].b-c[sta].a+1-mak;
	}
	else {
		if (c[end].a<=c[end].b) return c[end].a-c[sta].b+1-mak;
		else return c[end].b-c[sta].b+1-mak;
	}
}
int main()
{
	int n;
	scanf ("%d",&n);
	for (int i=1; i<=n; i++){
		scanf ("%d%d",&c[i].a,&c[i].b);
	}
	ll ans;
	if (c[n].a==0 && c[n].b==0) ans=1;
	else ans=0;
	for (int i=1; i<=n; i++){
		ans+=judge(i-1,i);
	}
	printf ("%lld\n",ans);
	return 0;
}
上一篇:7.18考试总结(NOIP模拟19)[u·v·w]


下一篇:AirTest -安卓ui自动化测试 验证码自动识别输入 登录