题解

1 条题解

  • 0
    @ 2015-05-31 17:09:38

    帮忙看看,哪里错啦,怎么一个点也不过,超时!!也

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<queue>
    #include<cstdlib>
    using namespace std;
    int rx,ry,n,m,t=1;
    int sum[1000001],b[1000001];
    int w[3][4],map[3][4];
    void change(int d,int x)
    {
    int k;
    bool flag;
    b[d]=x;
    for(int l=1;l<=n;l++)
    {
    flag=true;
    if(b[l]>rx)
    {
    k=b[l]-rx;
    for(int i=1;i<=rx;i++)
    w[i][k]=1-w[i][k];
    }else
    {
    k=b[l];
    for(int i=1;i<=ry;i++)
    w[k][i]=1-w[k][i];
    }
    for(int i=1;i<=rx;i++)
    for(int j=1;j<=ry;j++)
    if(w[i][j]!=map[i][j])
    {
    flag=false;
    break;
    }
    if(flag)
    sum[l]=sum[l-1]+1;
    else sum[l]=sum[l-1];

    /* for(int i=1;i<=rx;i++)
    {
    for(int j=1;j<=ry;j++)
    printf("%d",w[i][j]);
    printf("\n");
    }
    printf("\n");*/
    }

    }
    void fchange(int l,int r,int x)
    {
    int k;
    bool flag;
    for(int i=l;i<=r;i++)
    b[i]=x;
    for(int g=1;g<=n;g++)
    {

    flag=true;
    if(b[g]>rx)
    {
    k=b[g]-rx;
    for(int i=1;i<=rx;i++)
    w[i][k]=1-w[i][k];
    }else
    {
    k=b[l];
    for(int i=1;i<=ry;i++)
    w[k][i]=1-w[k][i];
    }
    ///////////
    for(int i=1;i<=rx;i++)
    for(int j=1;j<=ry;j++)
    if(w[i][j]!=map[i][j])
    {
    flag=false;
    break;
    }
    if(flag)
    sum[g]=sum[g-1]+1;
    }

    }
    int main()
    {
    freopen("p1957.in","r",stdin);
    scanf("%d%d",&rx,&ry);
    for(int i=1;i<=rx;i++)
    for(int j=1;j<=ry;j++)
    scanf("%d",&map[i][j]);
    scanf("%d%d",&n,&m);
    bool flag=true;
    for(int i=1;i<=n;i++) b[i]=1;
    //////////
    for(int i=1;i<=rx;i++)
    for(int j=1;j<=ry;j++)
    if(w[i][j]!=map[i][j])
    {
    flag=false;
    break;
    }
    if(flag)
    for(int i=1;i<=n;i+=2)
    {
    sum[i+1]=sum[i-1]+1;
    sum[i]=sum[i-1];
    }
    if(n%2==1)
    for(int i=1;i<=ry;i++)
    w[1][i]=1;
    for(int i=1;i<=rx;i++)
    for(int j=1;j<=ry;j++)
    if(w[i][j]!=map[i][j])
    {
    flag=false;
    break;
    }
    if(flag)
    for(int i=1;i<=n;i+=2)
    {
    sum[i]=sum[i-1]+1;
    sum[i+1]=sum[i];
    }
    ///////////
    int f,d,x,y,l,r;
    for(int k=1;k<=m;k++)
    {
    memset(w,0,sizeof(w));
    scanf("%d",&f);
    if(f==1)
    {
    scanf("%d%d",&x,&y);
    printf("%d\n",sum[y]-sum[x-1]);
    }
    if(f==0)
    {
    scanf("%d%d",&d,&x);
    change(d,x);
    }
    if(f==2)
    {
    scanf("%d%d%d",&l,&r,&x);
    fchange(l,r,x);
    }
    }
    return 0;
    }

    • @ 2021-07-19 16:17:13

      才能卖出那么聪明你吃没吃你吃没吃那场面

    • @ 2021-07-21 08:40:09

      开o,开一百万个o

      #pragma GCC optimize(3)
      #pragma GCC optimize(2)
      #pragma GCC optimize("-Ofast")
      __attribute__((optimize("-O3")))
      
  • 1

信息

ID
1957
难度
8
分类
(无)
标签
递交数
68
已通过
7
通过率
10%
被复制
2
上传者