Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

为什么WA啊,郁闷。

Posted by Savior at 2004-12-26 17:46:49 on Problem 2155
用位操作的,奇怪,没有超时,但是WA了,实在找不出错。

#include <stdio.h>
#include <string.h>

int n,m;
unsigned a[1010][1000/32+10];
char buf[2];

int query(int x,int y)
{
  int g=y>>5,h=y&31;
  return (a[x][g]>>h)&1;
}

void solve()
{
  unsigned i,i1,i2,j1,j2;
  int x1,y1,x2,y2;
  unsigned x,u;
  unsigned w,w1,w2;
  
  for(i=0;i<n;i++) memset(a[i],0,sizeof(a[i]));
  while(m-->0) {
    scanf("%s",buf);
    if(buf[0]=='C') {
      scanf("%d%d%d%d",&x1,&y1,&x2,&y2);

      x1--,y1--,x2--,y2--;
      for(x=x1;x<=x2;x++) {
	i1=y1>>5,i2=y2>>5;
	j1=y1&31,j2=y2&31;

	if(i1==i2) {
	  u=(1LL<<j1)-1;
	  w1=a[x][i1]&u;
	  a[x][i1]>>=j1;

	  j2=j2-j1+1;
	  u=(1LL<<j2)-1;
	  w2=(~a[x][i1])&u;
	  a[x][i1]=((((a[x][i1]>>j2)<<j2)|w2)<<j1)|w1;
	}
	else {
	  for(i=i1+1;i<i2;i++) a[x][i]=~a[x][i];

	  j2++;
	  u=(1LL<<j2)-1;
	  w=(~a[x][i2])&u;
	  a[x][i2]=((a[x][i2]>>j2)<<j2)|w;
	  
	  u=(1LL<<j1)-1;
	  w=a[x][i1]&u;
	  a[x][i1]=(((~a[x][i1])>>j1)<<j1)|w;
	}
      }
    }
    else {
      scanf("%d%d",&x1,&y1);
      x1--,y1--;
      printf("%d\n",query(x1,y1));
    }
  }
}

int main()
{
  int casen;

  scanf("%d",&casen);
  while(casen-->0) {
    scanf("%d%d",&n,&m);
    solve();
    if(casen>0) printf("\n");
  }

  return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator