计蒜客 ACM训练联盟周赛 第一场 Christina式方格取数 思维
助手Christina发明了一种方格取数的新玩法:在n*m的方格棋盘里,每个格子里写一个数。两个人轮流给格子染色,直到所有格子都染了色。在所有格子染色完后,计算双方的分数。对于任意两个相邻(即有公共边)的格子,如果它们都被同一个人染色,那么这个人将得到这两个格子中的数的异或的分数。所有的分数加和计算。
现在,Christina用这个游戏来挑战你,想让你一败涂地,因此她总是采用最优策略使得她的分数尽可能地比你多。为了不输得太惨,你需要知道自己最多比助手多多少分数,或最少比助手少多少分数——也就是你的得分减去助手的得分最大是多少。(先后手由输入给定)
输入
第一行一个正整数T,表示数据组数。
对于每组数据,输入第一行为三个整数n,m,f。其中f为0或1,当f=0,你是先手,当f=1,你是后手。
接着输入n行,每行m个非负整数,表示格子里的数。
输入保证2<=n,m<=400。格子里的数均为不超过int范围的非负整数。
此题有多组数据,数据组数T<=10。
输出
对于每一组数据,输出一行一个整数:你的得分减去助手的得分的最大值。
SOURCE:codeforces
输出时每行末尾的多余空格,不影响答案正确性
样例输入
1
3 3 0
1 2 3
4 5 6
7 8 9
样例输出
11
题目来源
分析:这题目的关键是怎么选择下一步。
题目求分数的过程中,如果有相邻的分数则两分数需异或,所以每个点的分数并不是最后可以用来算总分的分数。
他们的实际分数应该是这个点的分数和相邻所有点分数的异或和
然后我们根据所有的异或和相隔着一人取一个分数就可以得到每个人所能得到的最大分数
因为实际运算的结果中并不能取到结果点的所有相邻点,只能取到一半,所以在计算结果时还要再除以二
#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <cstdio>
#include <vector>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#define debug(a) cout << #a << " " << a << endl
using namespace std;
const int maxn = 4*1e2 + 10;
const int mod = 1e9 + 7;
typedef long long ll;
ll mapn[maxn][maxn], a[maxn*maxn];
ll dx[] = { 1, -1, 0, 0 }, dy[] = { 0, 0, 1, -1 };
bool cmp( ll x, ll y ) {
return x > y;
}
int main() {
ll t;
cin >> t;
while( t -- ) {
ll n, m, f;
memset( a, 0, sizeof(a) );
cin >> n >> m >> f;
for( ll i = 0; i < n; i ++ ) {
for( ll j = 0; j < m; j ++ ) {
cin >> mapn[i][j];
}
}
ll cnt = 0;
for( ll i = 0; i < n; i ++ ) {
for( ll j = 0; j < m; j ++ ) {
a[cnt] = 0;
for( ll k = 0; k < 4; k ++ ) {
ll x = i + dx[k];
ll y = j + dy[k];
if( x >= 0 && x < n && y >= 0 && y < m ) {
a[cnt] += (mapn[i][j]^mapn[x][y]);
}
}
cnt ++;
//cout << a[cnt-1] << " ";
}
//cout << endl;
}
sort( a, a + cnt, cmp );
ll sum1 = 0, sum2 = 0;
for( ll i = 0; i < cnt; i ++ ) {
if( i&1 ) {
sum2 += a[i];
} else {
sum1 += a[i];
}
}
//因为要取到相邻的所有点的时候才能得到结果,然而在我们实际的运算
//结果中只取到了这些结果点的一半相邻点,所以要除以二
if( !f ) {
cout << ( sum1 - sum2 ) / 2 << endl;
} else {
cout << ( sum2 - sum1 ) / 2 << endl;
}
}
return 0;
}
计蒜客 ACM训练联盟周赛 第一场 Christina式方格取数 思维的更多相关文章
- 计蒜客 ACM训练联盟周赛 第一场 从零开始的神棍之路 暴力dfs
题目描述 ggwdwsbs最近被Zeratul和Kyurem拉入了日本麻将的坑.现在,ggwdwsbs有13张牌,Kyurem又打了一张,加起来有14张牌.ggwdwsbs想拜托你帮他判断一下,这14 ...
- 计蒜客 ACM训练联盟周赛 第一场 Alice和Bob的Nim游戏 矩阵快速幂
题目描述 众所周知,Alice和Bob非常喜欢博弈,而且Alice永远是先手,Bob永远是后手. Alice和Bob面前有3堆石子,Alice和Bob每次轮流拿某堆石子中的若干个石子(不可以是0个), ...
- ACM训练联盟周赛(第一场)
B:Zeratul与Xor 题目描述 Xor(按位异或),对应C++中的“^”运算符. Zeratul给出了一个数列A[n](n≤105),要做q(q≤105)组动作,这些动作包括: 1 a:数列中 ...
- 计蒜客 28449.算个欧拉函数给大家助助兴-大数的因子个数 (HDU5649.DZY Loves Sorting) ( ACM训练联盟周赛 G)
ACM训练联盟周赛 这一场有几个数据结构的题,但是自己太菜,不会树套树,带插入的区间第K小-替罪羊套函数式线段树, 先立个flag,BZOJ3065: 带插入区间K小值 计蒜客 Zeratul与Xor ...
- 计蒜客 28437.Big brother said the calculation-线段树+二分-当前第k个位置的数 ( ACM训练联盟周赛 M)
M. Big brother said the calculation 通过线段树维护. 这个题和杭电的一道题几乎就是一样的题目.HDU5649.DZY Loves Sorting 题意就是一个n的排 ...
- 计蒜客 ACM竞赛高校联盟训练赛 第8场 煎牛排
水一水. https://nanti.jisuanke.com/t/24205 煎牛排 题目描述 又是一个难得的周六,是时候远离食堂和外卖出去大吃一顿了.圈内知名吃货AA正想着中午去吃汉堡炸鸡烤肉火锅 ...
- 计蒜客 28319.Interesting Integers-类似斐波那契数列-递推思维题 (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 I)
I. Interesting Integers 传送门 应该是叫思维题吧,反正敲一下脑壳才知道自己哪里写错了.要敢于暴力. 这个题的题意就是给你一个数,让你逆推出递推的最开始的两个数(假设一开始的两个 ...
- ACM训练联盟周赛 A. Teemo's bad day
65536K Today is a bad day. Teemo is scolded badly by his teacher because he didn't do his homework ...
- ACM训练联盟周赛 K. Teemo's reunited
Teemo likes to drink raspberry juice. He even spent some of his spare time tomake the raspberry jui ...
随机推荐
- memCached的配置文件 配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 【有容云】PPT | 容器与CICD的遇见
编者注:本文为12月21日晚上8点有容云高级咨询顾问蒋运龙在腾讯课堂中演讲的PPT,本次课堂为有容云主办的线上直播Docker Live时代●Online Meetup-第四期:容器与CICD的遇见, ...
- c#小灶——注释和代码规范
为什么要写注释? 早上我写完了代码,我和我的朋友们都能看懂,到了晚上,我还能看懂,一周后,就只有上帝能看懂了…… 将来我们写的代码量是很大的,代码又不像我们自然语言这么好理解,可能过段时间我们就不认识 ...
- JS中以一个方法作为参数的写法
一:以方法作为参数 这下来说直接以一个方法来作为参数的写法,直接上代码: -----------这样调用的方法------------- go(function(){ alert("succ ...
- java高并发系列 - 第23天:JUC中原子类,一篇就够了
这是java高并发系列第23篇文章,环境:jdk1.8. 本文主要内容 JUC中的原子类介绍 介绍基本类型原子类 介绍数组类型原子类 介绍引用类型原子类 介绍对象属性修改相关原子类 预备知识 JUC中 ...
- Keil5调试过程中遇到的一些警告和错误
最近用keil5调试代码出了一些警告与错误,整理如下: 1.warning: #1295-D: Deprecated declaration run_c - give arg types void r ...
- NOIP 2018旅行题解
从佳木斯回来刷一刷去年没A的题 题目描述 小 Y 是一个爱好旅行的 OIer.她来到 X 国,打算将各个城市都玩一遍. 小Y了解到, X国的 nn 个城市之间有 mm 条双向道路.每条双向道路连接两个 ...
- Java下载文件方法
public static void download(String path, HttpServletResponse response) { try { // path是指欲下载的文件的路径. F ...
- http客户端-性能比较系列-第一篇-单线程
系列文章: 单线程性能测试:https://www.cnblogs.com/victor2302/p/11077208.html 多线程性能测试:https://www.cnblogs.com/vic ...
- soap天气查询
public class MainActivity extends AppCompatActivity { private TextView tvContent; @Override protecte ...