B2321 [BeiJing2011集训]星器 数学&&物理
这个题貌似特别奇怪,根本什么算法都想不出来,然而。。。看完题解之后,竟然用了能量守恒?惊了!
这里有一个题解:
https://blog.csdn.net/Mima_Reincarnation/article/details/53965251
膜一下自己写出来的大佬,太强了!
题干:
题目描述
Magic Land上的时间又过了若干世纪……
现在,人们谈论着一个传说:从前,他们的祖先来到了一个位于东方的岛屿,那里简直就是另外一个世界。善于分析与构造的Magic Land上的人们总是不明白那里的人们是如何不借助精确的实验与计算驱动和操纵魔法。
偶然地,一个魔法使(Magician)来到了Magic Land,在临走的时候留下了一个神奇的盒子,叫做星器(Casket of star)。
虽然不知道这个盒子是做什么的,但是经过了大量的实验和计算后,人们已经清楚它的一些事实:
.星器之中有N×M个区域,可看作分成N行和M列的格子,每个区域之中有若干单位的称为“星”的对象,这个对象的最小单位已经被确定,所以,这个数量总是整数。
.魔法使可以驱动星器中位于同一行或同一列的不相邻(有公共边的区域称为相邻的)两个区域中各1单位的“星”,使得它们分别向中心移动1格。
.每一次使用2中的方法驱动“星”,将会产生魔力,魔法使会得到这一部分魔力。魔力的量等于这个两个区域之间所间隔的区域数。
这样,我们可以用一个N×M的数表来表示星器的状态,比如N=,M=3时: 当星器为左图的状态时,通过操纵第一行的第1和3个区域中的“星”(加粗的数字对应的区域),变为右图所示的状态,同时,将产生1单位的魔力(因为这两个区域之间恰好隔了1个区域)。
在经过了进一步的研究之后,人们知道了这个星器最初的状态(Ini)以及最终被他们得到时的状态(Fin)。
你希望知道,星器最多帮助它的拥有者提供了多少的魔力。即:经过一系列上述操作由初态(Ini)变为终态(Fin),至多产生多少魔力。
需要注意的是,显然操作过程中每个区域内“星”的数量不能是负的,即:如果那个区域已经没有“星”了,当然就不能继续操作了。
输入格式
第一行包含两个正整数N、M表示星器的大小。
接下来的N行,每行包含M个自然数:Iniij,描绘了初态(Ini)。
在一个空行后的N行,每行包含M个自然数:Finij,描绘了终态(Fin)。
输出格式
输出一个正整数,表示至多产生的魔力。
样例输入
【输入样例1】 【输入样例2】 样例输出
【输出样例1】 【样例1解释】
唯一的一种操作方法是:
对第5列的两个“星”进行一次操作,产生魔力2;
对第1列的两个“星”进行两次操作,产生魔力3+;
对第4行的两个“星”进行一次操作,产生魔力1;
一共产生7单位的魔力。
【输出样例2】 提示
【数据规模和约定】
%的数据中N ≤ ,如样例2;
%的数据中1 ≤ N,M ≤ ,Iniij,Finij ≤ 。
所有数据保证了至少存在一个操作方法使得星器由初态变为终态,同时保证了初态与终态不是完全相同的。
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
#define duke(i,a,n) for(int i = a;i <= n;i++)
#define lv(i,a,n) for(int i = a;i >= n;i--)
#define clean(a) memset(a,0,sizeof(a))
const int INF = << ;
typedef long long ll;
typedef double db;
template <class T>
void read(T &x)
{
char c;
bool op = ;
while(c = getchar(), c < '' || c > '')
if(c == '-') op = ;
x = c - '';
while(c = getchar(), c >= '' && c <= '')
x = x * + c - '';
if(op) x = -x;
}
template <class T>
void write(T x)
{
if(x < ) putchar('-'), x = -x;
if(x >= ) write(x / );
putchar('' + x % );
}
int mp[][];
int n,m;
ll tot = ;
int main()
{
read(n);read(m);
duke(i,,n)
{
duke(j,,m)
read(mp[i][j]);
}
int v;
duke(i,,n)
{
duke(j,,m)
{
read(v);
tot += (ll)(mp[i][j] - v) * (i * i + j * j);
}
}
printf("%lld",tot >> );
return ;
}
/*
5 5
1 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 1 0 1 1
1 0 0 0 0
0 0 0 0 0
0 0 0 0 1
2 0 0 0 1
0 0 2 0 0
0 0 0 0 0
*/
B2321 [BeiJing2011集训]星器 数学&&物理的更多相关文章
- BZOJ2321 [BeiJing2011集训] 星器
2321: [BeiJing2011集训]星器 Time Limit: 1 Sec Memory Limit: 128 MB Description Magic Land上的时间又过了若干世纪…… ...
- 【BZOJ】2321: [BeiJing2011集训]星器(数学+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=2321 完全想不到.. 第一眼以为是爆搜,看到数据范围果断放弃:第二眼以为是网络流(因为只有行列操作, ...
- 【BZOJ 2321】 [BeiJing2011集训]星器
Description Magic Land上的时间又过了若干世纪…… 现在,人们谈论着一个传说:从前,他们的祖先来到了一个位于东方的岛屿,那里简直就是另外一个世界.善于分析与构造的Magic Lan ...
- sqlserver 行转列 语文,数学,物理,化学
数据库查询行转列 1.原数据库值 stdname stdsubject result 张三 语文 张三 数学 张三 物理 李四 语文 李四 数学 李四 物理 李四 化学 李四 化学 2.要得到如下表 ...
- BZOJ 2321 星器
星器 思路: 势能分析法. 假设每颗星星的势能为\(x^2+y^2\) 那么对于一行的两颗星星\((i, j), (i, k), j < k\) 它转移到\((i, j+1), (i, k-1) ...
- BJ2011集训/BZOJ2321 星器
对于一行上的两个星星,假设它们的坐标为\(x1,x2\) \(x1->x1+1\) \(x2->x2-1\) \((x1+1)^2=x1^2+1+2*x1\) \((x2-1)^2=x2^ ...
- hdu 4946 Just a Joke(数学+物理)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4969 Just a Joke Time Limit: 2000/1000 MS (Java/Others) ...
- BNUOJ34977夜空中最亮的星(数学,向量的应用)
夜空中最亮的星 Time Limit: 2000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- VHDL之Serial-Parallel Multiplier
1 Serial-parallel multiplier Figure 12.1 shows the RTL diagram of a serial-parallel multiplier. One ...
- ( 转)Hibernate常用API
http://blog.csdn.net/yerenyuan_pku/article/details/65103203 可在度娘上摘抄如下文字: Hibernate的核心类和接口一共有6个,分别为:S ...
- yum进程被占用
使用yum安装软件的时候出现,/var/run/yum.pid 已被锁定,PID 为 6503 的另一个程序正在运行的问题 [root@localhost mysql]# yum install gc ...
- 一台电脑同时使用多个Git账号
参照 https://my.oschina.net/u/3578363/blog/2209781
- shouldComponentUpdate不能直接比较object
凡是参阅过react官方英文文档的童鞋大体上都能知道对于一个组件来说,其state的改变(调用this.setState()方法)以及从父组件接受的props发生变化时,会导致组件重渲染,正所谓&qu ...
- 本地读取服务器Xml文件及本地读本地的xml
updateUrl="ServerUrl"(服务器路径) WebClient wc = new WebClient(); Stream stream = wc.OpenRead(u ...
- 网络:NAT使用场景
NAT:Network Address Translation 网络地址转换 使用场景:家庭局域网,公司局域网的网络设备没有公网IP地址如何访问互联网? 简单图示: 理解一些原理: 1,互联网中网络 ...
- win10下VMware Workstation 14运行虚拟机黑屏
最新 升级电脑Win10自动升级后,在打开虚拟机后,很卡,且出现黑屏,但是挂起后仍能显示锁屏界面,网上就一顿搜.下面放解决方法. 管理员运行 netsh winsock reset 帮你解决一切烦恼. ...
- Linux - redis持久化RDB与AOF
目录 Linux - redis持久化RDB与AOF RDB持久化 redis持久化之AOF redis不重启,切换RDB备份到AOF备份 确保redis版本在2.2以上 实验环境准备 备份这个rdb ...
- wx微信小程序
俩三行时: ==========