csp的贪吃蛇代码如下
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=1e6+100,INF=1e9;
struct Node
{
int val,num;
#define val(i) a[i].val
#define num(i) a[i].num
bool operator < (const Node y)
{
return val==y.val?num<y.num:val<y.val;
}
bool operator == (const Node y)
{
return val==y.val && num==y.num;
}
}a[N];
int T,n,k,ph,pb;
queue<Node> q;
Node blank={0,0},black={INF,INF};
Node Max(Node x,Node y)
{
return (x<y)?y:x;
}
Node Min(Node x,Node y)
{
return (x<y)?x:y;
}
bool query(Node la)
{
int cnt=0;
Node bk=Min(pb<ph?a[pb+1]:black,q.size()?q.back():black);
while(1)
{
Node hd=Max(pb<ph?a[ph]:blank,q.size()?q.front():blank);
if(a[ph]==hd)
ph--;
else
if(q.size())
q.pop();
if(hd==bk)
break;
hd.val-=la.val;
if(bk<hd)
break;
la=hd;cnt++;
}
return cnt&1;
}
int main()
{
scanf("%d",&T);
for(int i=1;i<=T;i++)
{
if(i==1)
{
scanf("%d",&n);
for(int j=1;j<=n;j++)
scanf("%d",&val(j)),num(j)=j;
}
else
{
scanf("%d",&k);
for(int j=1,x,y;j<=k;j++)
{
scanf("%d%d",&x,&y);
val(x)=y;
}
}
ph=n,pb=1;
while(q.size())
q.pop();
while(pb<=ph)
{
Node x=Max((ph>pb)?a[ph]:blank,q.size()?q.front():blank);
if(a[ph]==x)
ph--;
else
q.pop();
x.val-=val(pb);
if(x<a[pb+1] && n-pb>1)
{
if(query(x))
pb++;
break;
}
q.push(x);pb++;
}
printf("%d\n",n-pb+1);
}
return 0;
}
为什么只得了74.5分呢!?