题目连接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=42107#problem/A
题目意思是:一串int位置,两个儿轮流走,给个初始位置,拿了当前位置上的值,并且移动到相连的格子,每个人都想尽量拿多的值。
思路:贪心,因为每个人都很聪明,因此每个人后方的价值都会是自己的,另外一个人追不上。因此,他们都先往中间位置走,相遇是,往回走,拿完自己的价值。
但是,注意初始位置,可能同一个地方,可能f-s或s-f。还有一个wa的地方,每次拿了价值是要移动到相连的格子里去的,不是还呆在自己的格子。
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
int n;
int f,s;
int sum[100005];
while(~scanf("%d",&n))
{
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++)
{
int a;
scanf("%d",&a);
sum[i]=sum[i-1]+a;
}
scanf("%d%d",&f,&s);
if(f==s)
{
int l=sum[f-1],m=sum[f]-sum[f-1],r=sum[n]-sum[f];
int xiao,da;
if(l<r){xiao=l,da=r;}
else{xiao=r,da=l;}
printf("%d %d\n",m+da,xiao);//吃了当前位置
}
else if(f<s)
{
int m=(s+f)/2;
printf("%d %d\n",sum[m],sum[n]-sum[m]);
}
else if(f>s)
{
int m=(s+f+1)/2;
printf("%d %d\n",sum[n]-sum[m-1],sum[m-1]);
}
}
return 0;
}