2015 湘潭大学程序设计比赛(Internet)--E题--烦人的异或

烦人的异或

Accepted : 27   Submit : 102
Time Limit : 5000 MS   Memory Limit : 65536 KB

题目描述

如下图,有一N*M的表格,每个格子有一个数字。我们定义主矩形为给出的一对坐标所确定的矩形(该对坐标总是某个矩形的对顶点坐标对)。它最多可产生4个副矩形, 均由主矩形的顶点和表格边界确定。我们需要的是所有阴影部分的数的异或值。

上图的x1=3,y1=3,x2=4,y2=4,所以答案就是a11^a12^a21^a22^a15^a16^a25^a26^a33^a34^a43^a44^a51^a52^a61^a62^a55^a56^a65^a66。 其中 ‘^‘ 代表异或符号,aij代表第i行第j列的方格中的数字。

输入

第一行是一个整数T(T≤10),表示测试数据组数。 每组数据第一行三个整数N,M,Q(0<N,M≤1000,Q≤500000),Q表示有Q组询问。 接着输入N行,每行有M个数字,表示表格里的数字(非负整数,且不大于109)。 最后有Q行,表示Q个询问,每行包含4个正整数x1,y1,x2,y2(1≤x1≤x2≤N,1≤y1≤y2≤M)。

输出

对于每个查询,输出一行,表示异或结果。

样例输入

1
4 4 3
1 0 2 1
0 2 1 1
2 1 1 0
1 1 0 2
2 2 2 2
2 2 3 3
2 2 4 4

样例输出

0
0
0

提示

大量的输入输出,请使用C风格的输入输出;

1=2^3^4^整体;

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 1050
using namespace std;

int maps[N][N],a[N][N];

int main()
{
    int n,T,m,k,i,j,A,B,C,D,E;
    int x,y,x0,y0,x1,y1,x2,y2;
    scanf("%d",&T);
    while(T--)
    {
        memset(a,0,sizeof(a));
        memset(maps,0,sizeof(maps));
        scanf("%d%d%d",&n,&m,&k);
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                scanf("%d",&maps[i][j]);
                a[i][j]=a[i-1][j]^a[i][j-1]^a[i-1][j-1]^maps[i][j];
            }
        }
        for(i=0;i<k;i++)
        {
            scanf("%d %d %d %d",&x,&y,&x0,&y0);
            x1=min(x,x0);
            y1=min(y,y0);
            x2=max(x,x0);
            y2=max(y,y0);

            A=a[x1-1][y1-1];
            B=a[x1-1][m]^a[x1-1][y2];
            C=a[n][y1-1]^a[x2][y1-1];
            D=a[n][m]^a[x2][m]^a[n][y2]^a[x2][y2];
            E=a[x2][y2]^a[x1-1][y2]^a[x2][y1-1]^a[x1-1][y1-1];
            printf("%d\n",A^B^C^D^E);
        }
    }

    return 0;
}

时间: 2024-11-25 08:48:16

2015 湘潭大学程序设计比赛(Internet)--E题--烦人的异或的相关文章

2015 湘潭大学程序设计比赛(Internet)--D题-最小的数

最小的数 Accepted : 47   Submit : 276 Time Limit : 1000 MS   Memory Limit : 65536 KB 题目描述 给你一个n位数,每次操作可以选该数任意的相邻两位进行交换,如果最多可以操作k次,那么最终可以得到的最小的数是什么 (n位且不能含前导零)? 输入 有多组测试数据,第一行为数据个数T(T<=10); 每组数据占一行,包含一个数(不超过1000位)和k(0<=k<=1000),中间用空格隔开; 输出 最终能得到的最小的数.

2015 湘潭大学程序设计比赛(Internet)Problem D:最小的数

今天的比赛,因为时间问题,我就做了这一个题 题目描述 给你一个n位数,每次操作可以选该数任意的相邻两位进行交换,如果最多可以操作k次,那么最终可以得到的最小的数是什么 (n位且不能含前导零)? 输入 有多组测试数据,第一行为数据个数T(T<=10); 每组数据占一行,包含一个数(不超过1000位)和k(0<=k<=1000),中间用空格隔开; 输出 最终能得到的最小的数. 样例输入 2 321654987 1 321654987 2 样例输出 231654987 132654987 这个

2015 湘潭大学程序设计比赛(Internet) 全解析 + AC代码

一到搜索卡死人... 1. 两个变量记录等级和经验值就好. int main(){ int T; scanf("%d",&T); while(T--){ int n,l; int jy=0; int sum = 0; scanf("%d%d",&n,&l); for(int i = 0;i<n;i++){ int t; scanf("%d",&t); if(l<t) continue; jy += 10

记第五届山东省ACM程序设计比赛——遗憾并非遗憾

记第五届山东省ACM程序设计比赛 5月10日上午9点半左右,我们的队伍从学校出发,一个多小时后到达本次比赛的地点-哈尔滨工业大学. 报道,领材料,吃午饭,在哈工大的校园里逛了逛,去主楼的自习室歇息了一会.然后參加下午两点到四点的热身赛.不得不吐槽一下热身赛的题目,第一个题题目的数据范围写的是十的六次方,我们写出来提交怎么也不正确,后来快结束时看讨论板,管理人员说数据范围是十的九次方,无语了.第二个题目无输入,仅仅输出1到20之间的一个随机整数,题目上也明白说了是拼人品的题目,有的队伍"人品比較好

因为一个空格,就注定了结果——第五届山东省ACM程序设计比赛总结

应该来说这是一个很失败的结果,本届省赛铩羽而归.正如志愿者所说,打铁是一件很丢人的事情. 作为队长,完全没有想到会是这样的一次旅程.虽然因为去baidu的实习和各种offer的申请,对acm抱着能水就水绝不深究的敷衍态度.但之前着实还是参加了一些商业比赛,成绩都还可以,表面的繁盛更加放松了我的警惕.完全没有想到,正是线下赛的放松,使我线上赛的心态发生了重大的变化,并连锁反应了这一系列不理想的后果. 好多事情看起来完全是偶然因素,但是偶然中往往蕴藏着一些必然. 热身赛和去年一样,第二题是纯粹试人品

记第五届山东省ACM程序设计比赛——遗憾并不是遗憾

记第五届山东省ACM程序设计比赛 5月10日上午9点半左右,我们的队伍从学校出发,一个多小时后到达本次比赛的地点-哈尔滨工业大学. 报道,领材料,吃午饭,在哈工大的校园里逛了逛,去主楼的自习室休息了一会.然后参加下午两点到四点的热身赛.不得不吐槽一下热身赛的题目,第一个题题目的数据范围写的是十的六次方,我们写出来提交怎么也不对,后来快结束时看讨论板,管理人员说数据范围是十的九次方,无语了.第二个题目无输入,只输出1到20之间的一个随机整数,题目上也明确说了是拼人品的题目,有的队伍"人品比较好&q

四川大学线下编程比赛第三题:书本转移

好久没写过日志,也怪最近事情真的特别多,最近参加关于编程方面就是CSDN高校俱乐部举办的线下编程塞,说起这次编程赛,总共三道题,题目都可以在csdn高校俱乐部上看到,参加比赛的时候有点小紧张,第三题涉及到队列,当时的机器没有代码提示,坑...也怨自己平时写代码用惯了代码提示,很多stl的方法都是隐隐约约知道,但是具体的不知道,导致第三题没有做出来,遗憾哈!下面贴一下今天写的第三题的代码 题目 四川大学线下编程比赛第三题:书本转移 题目详情: 小强有 3 个箱子 A,B,C 用来装书,所有的书(一

2014年百度之星程序设计大赛 资格赛第一题 (longlong)

解题思路: 只要看(A-V)*K 这个公式的更新值是否大于等于A ,大于的话继续循环,否则报错 注意一点,数据会爆int WA代码: #include<stdio.h> int main(){ long long n ,m, v, k; int t; scanf("%d",&t); while(t--){ scanf("%lld%lld%lld%lld",&n,&m,&v,&k); int cnt = 0; whi

2019年湘潭大学程序设计竞赛(重现赛)

2019年湘潭大学程序设计竞赛(重现赛) A:Who's better? #include<bits/stdc++.h> using namespace std; int main(){ int n1,p1,s1,n2,p2,s2; cin>>n1>>p1>>s1; cin>>n2>>p2>>s2; if(n1!=n2){ if(n1>n2)cout<<"1\n"; else cout