HZOJ Drink
神仙题,打了个whs式暴力卡常卡A了(我没脸),正解还是要打的,然而作者的题解看不懂……
Drink:
看惯了罗马音的小朋友们都会知道r发l的音,题目名:D Link.
每次修改都会改变O( N ^ 2 )个位置的值,二维平面上没有一个确定的正方向,因此也无法使用传统数据结构。
什么东西的变化量是O( N )级别的呢?
如果把每个点都看作一个人,他的头面向某个方向。分别记录这个人的方向上的前后左右分别是谁,那么每次旋转改变的只是正方形边缘上的值,以及所有点的方向。
这样来看至少我们发现了变化量为O( N )级别的东西啦(虽然方向的改变量还是O( N ^ 2 ))。
注意到,我们并不需要真的知道每个点的方向,我们只需要正确地维护前后左右四个值即可。因为每个点的方向是可以由已知方向的相邻点算出来的!
每个点确实是有方向的,但是我们不用纪录也不用直接更改它,每次只要正确修改边界上的值,整个矩形的方向就会自动改变。
解决啦!
复杂度O( Q * N ), 常数稍大。
搞不懂,先坑着。把暴力代码放出来:
#include<iostream>
#include<cstring>
#include<cstdio>
#define LL long long
#define ma(x) memset(x,0,sizeof(x))
using namespace std;
int n,m,q;
int x[],y[],c[];
char map[][],tmap[][];
inline int read();
signed main()
{
// freopen("drink.in","r",stdin);
// freopen("3.out","w",stdout); n=read(),m=read(),q=read();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
map[i][j]=getchar();
while(map[i][j]<''||map[i][j]>'')map[i][j]=getchar();
tmap[i][j]=map[i][j];
}
int tx,ty,tc;
for(int i=;i<=q;i++)
{
tx=read(),ty=read(),tc=read();
for(;tc>;tc-=,tx++,ty++)
{
for(int j=;j<tc-;j++)
{
int t1=map[tx+j][ty+tc-],
t2=map[tx][ty+j],
t3=map[tx+tc-][ty+tc--j],
t4=map[tx+tc--j][ty];
map[tx+j][ty+tc-]=t2;
map[tx][ty+j]=t4;
map[tx+tc-][ty+tc--j]=t1;
map[tx+tc--j][ty]=t3;
}
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
printf("%d ",map[i][j]-'');
puts("");
}
}
inline int read()
{
int s=,f=;char a=getchar();
while(a<''||a>''){if(a=='-')f=-;a=getchar();}
while(a>=''&&a<=''){s=s*+a-'';a=getchar();}
return s*f;
}
HZOJ Drink的更多相关文章
- Codeforces Round #367 (Div. 2) B. Interesting drink (模拟)
Interesting drink 题目链接: http://codeforces.com/contest/706/problem/B Description Vasiliy likes to res ...
- Hdu 2979 Expensive Drink
Description There are some water, milk and wine in your kitchen. Your naughty little sister made som ...
- ZZNU 2098 Drink coffee(差分+树状数组)
题目链接:http://acm.hi-54.com/problem.php?pid=2098 2098 : Drink coffee 时间限制:1 Sec 内存限制:256 MiB 提交:32 答案正 ...
- codeforces 706B B. Interesting drink(二分)
题目链接: B. Interesting drink 题意: 给出第i个商店的价钱为x[i],现在询问mi能在多少个地方买酒; 思路: sort后再二分; AC代码: #include <ios ...
- 8.10 NOIP模拟测试16 Blue+Weed+Drink
T1 Blue 贪心,每次跳得时候跳能跳到的最远的地方,跳过的就把他设为0,每次二分找到位置,一直跳就行,如果能跳到的位置就是当前位置或比当前位置还小(数组里现在呆着的这一块石头,二分得到的就是当前位 ...
- ZZNU-OJ-2098 : Drink coffee【线段树合并区间或者 差分 + 二分索引树】
: Drink coffee 时间限制: Sec 内存限制: MiB 提交: 答案正确: 提交 状态 讨论区 题目描述 为了在上课时保持清醒,凯伦需要一些咖啡.咖啡爱好者凯伦想知道最佳的温度来冲煮完美 ...
- NOIP模拟测试16「Drink·blue·weed」
话说这次考试 Drink 非常棒的一道卡常练习题,适合练习卡常 真的很棒 前置卡常知识 1.char要比int快 char是最快的 输出putchar,输入getchar 在这个题快了7000豪 2. ...
- CodeForces - 706B Interesting drink(二分查找)
Interesting drink Problem Vasiliy likes to rest after a hard work, so you may often meet him in some ...
- CodeForces 706B Interesting drink (二分查找)
题意:给定 n 个数,然后有 m 个询问,每个询问一个数,问你小于等于这个数的数有多少个. 析:其实很简单么,先排序,然后十分查找,so easy. 代码如下: #pragma comment(lin ...
随机推荐
- JavaScript中this的指向2(转载)
1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...
- HDU1950
//虽然是一道LIS问题,但是还是第一次用O(n*lgn)这种算法,赶角波错哈哈哈哈....至少今天有所收获 #include<cstdio> #include<cstring> ...
- Mybatis insert返回主键ID
Mybatis insert语句书写 <insert id="insertSelective" useGeneratedKeys="true" keyPr ...
- NYOJ1367 物流配送
题目描述: 物流配送是物流活动中一种非单一的业务形式,它与物品流动.资金流动紧密结合.备货是配送的准备工作或基础工作,备货工作包括筹集货源.订货或购货.集货.进货及有关的质量检查.结算.交接等.配送的 ...
- 安装 TortoiseSVN 时提示 please install the universal crt first
win7x64 解决办法 去https://www.microsoft.com/zh-cn/搜索 universal crt (hotfix kb2999226)点击下图链接 也就是https://s ...
- linux追加中文字库,解决imagemagick 中文乱码的问题。
Windows下的字体丰富多样,而且显示的工整.漂亮. 所以自己想把windows上的字体移到Ubuntu下来.Windows下字体库的位置为C:\Windows\fonts,这里面包含所有windo ...
- Leetcode581.Shortest Unsorted Continuous Subarray最短无序连续子数组
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序. 你找到的子数组应是最短的,请输出它的长度. 示例 1: 输入: [2, 6, 4, 8, 1 ...
- Linux系统下实现远程连接MySQL数据库的方法教程
1.在服务器端开启远程访问首先进入mysql数据库,然后输入下面两个命令: grant all privileges on *.* to 'root'@'%' identified by 'passw ...
- 安装tengine及淘宝会话保持模块
安装tengine及淘宝会话保持模块 下载http://tengine.taobao.org/ 解压tar -zxvf tengine-2.3.0.tar.gz 安装GCC: yum -y insta ...
- ConcurrentModificationException解决办法
package test.my.chap0302; import java.util.ArrayList; import java.util.Iterator; import java.util.Li ...