传送门


题意:由n*m个格子组成的网格地图,一辆车沿着边移动,车从起点出发,最终又回到起点
每个格子中间都站着一个人,一直面向着车,若(x,y)格子的人在车子行驶过程中,顺时针转了a度,逆时针b度,则对答案的贡献是(a−b360)2{(\frac{a-b}{360})}^2,求贡献之和


因为最终必定要回到起点,所以不难发现没有被车的路径包围住的格子,对答案贡献都是0
而当车子从(x,y)->(x+dis,y),明显,这条路径2侧的格子
(x′,y′) | (x<=x′<=x+dis)且(1<=y′<=y){(x',y')\ |\ (x和(x′,y′) | (x<=x′<=x+dis)且(y<y′<=m){(x',y')\ |\ (x
分别旋转了90度和-90度 (大致是这样,边界随便扯的..自己推下就知道了)

所以用2维树状数组可以做…但是重现的时候并没有做出来…比较复杂

主要到,车子必定会回到起点,所以若格子(x,y),车子在他的左边往下走了a次,往上走了b次
那必定被包含了(b-a)次
参考2维bit的维护方法,最后求一次前缀矩阵即可

#include<stdio.h>
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define MEM(a,px) memset(a,px,sizeof(a))
#define lowbit(px) ((px)&-(px))using namespace std;const int inf=1e9+7;
const int N =  5e6+50;inline void scan_d(int &ret) {char c; ret=0;while((c=getchar())<'0'||c>'9');while(c>='0'&&c<='9') ret=ret*10+(c-'0'),c=getchar();
}int dat[N];
vector<int*>c;void init(int n,int m){c.resize(n+2);for(int i=0;i<=n+1;++i){c[i]=dat+i*(m+2);fill(c[i],c[i]+m+2,0);}
}void add(char ch,int dis,int&x,int&y){switch(ch){case 'U':c[x-dis+1][y+1]+=1;c[x+1][y+1]-=1;x-=dis;break;case 'D':c[x+1][y+1]-=1;c[x+dis+1][y+1]+=1;x+=dis;break;case 'L':y-=dis;break;case 'R':y+=dis;break;}
}ll getAns(int n,int m){ll ans=0;for(int i=1;i<=n;++i){for(int j=1;j<=m;++j){c[i][j]=c[i][j]+c[i][j-1]+c[i-1][j]-c[i-1][j-1];ans+=c[i][j]*c[i][j];}}return ans;
}int main()
{//freopen("/home/lu/code/r.txt","r",stdin);//freopen("/home/lu/code/w.txt","w",stdout);int T;scan_d(T);for(int tt=1;tt<=T;++tt){int n,m,k;scan_d(n);scan_d(m);scan_d(k);init(n,m);char ch;int dis;int x,y=x=0;while(k--){while(!isalpha(ch=getchar()));scan_d(dis);add(ch,dis,x,y);}printf("Case #%d: %lld\n",tt,getAns(n,m));}return 0;
}

UVALive 7139 - Rotation相关推荐

  1. UVALive - 7139 Rotation 矩阵前缀和(imos和)

    传送门:UVALive 7139 题意:N*M的网格,一辆车沿着网格线按给定路线走,每个网格里有一个人,人的视线始终看着车,问这些人净转圈数的平方和. 思路:因为起点和终点都是左上角,因此我们可以维护 ...

  2. UVALive 7139 Rotation(模拟)

    思路:模拟题,留意到其实左右操作是会抵消的,所以只用考虑上下就好了 #include<iostream> #include<cstdio> #include<vector ...

  3. UVALive 7139 Rotation(矩阵前缀和)(2014 Asia Shanghai Regional Contest)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...

  4. UVALive 7139 Rotation

     这个题就是模拟题,但是性质很深. 观察可得到一个结论:对于一个方格中的人来说,如果要有一个完整的时针旋转,则必然是一边走下去,一边走上去,且"包含"所以不用考虑R,L. 若车 ...

  5. UVALive 7139 Rotation 二维vector+矩阵前缀和 【模版】

    题目大意:给一个n*m的矩阵,每个方块上有一个人.现在有一辆车在左上角的格点处,矩阵里的人都会一直面向那辆车.现在给出车的移动路线,问每个人总旋转角度的平方和是多少.若一个人顺时针旋转10个圈,逆时针 ...

  6. UVALive - 7139(差分+模拟)

    题目链接 参考 题意 N*M的网格,一辆车沿着网格线按给定路线走,每个网格里有一个人,人的视线始终看着车,问这些人净转圈数的平方和. 分析 由于车的起点和终点都为左上角,且每个格子里的人永远面对着车, ...

  7. DP UVALive 6506 Padovan Sequence

    题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...

  8. add python3.7 to path是什么意思_一起读源码:为什么 loguru 的时间 rotation 不能只精确到天...

    摄影:产品经理猪耳朵与鹌鹑蛋做的皮蛋 今天的问题来自未闻 Code 粉丝交流群: " loguru 每天自动生成的日志名字,可以只精确到日吗? " 如下图所示: 这里的每天自动生成 ...

  9. 对抗网络用于人脸转正--Beyond Face Rotation

    Beyond Face Rotation: Global and Local Perception GAN for Photorealistic and Identity Preserving Fro ...

最新文章

  1. python不定长参数怎么相加_python函数不定长参数使用方法解析
  2. JavaScript中Ajax源码
  3. python绘制子图去掉x轴坐标值_python – 关闭图形的所有子图的轴
  4. Objdump查看汇编和源码
  5. java生产者消费者代码_在Java面试中常遇到的技术问题汇总
  6. List集合之ArrayList
  7. PCB覆铜利弊——天线角度
  8. Apollo学习笔记(一):canbus模块与车辆底盘之间的CAN数据传输过程
  9. ie8加载js太慢_ie8加载不了javascript怎么办?
  10. 数学建模——公交调度优化
  11. 第一个项目:D触发器,DFRB1C。
  12. 自动化测试 selenium 模块 webdriver使用02
  13. 翻斗式雨量计的组成与工作原理
  14. YBT 6 数学基础
  15. 微软系列的PPC开发工具【转贴】
  16. 物联网产业规模已达万亿,目前的主要应用领域有哪些?
  17. 今日金融词汇---网格交易,是什么?
  18. iOS学习—让View从下面弹出
  19. 利用html开发英语单词小程,前端利用表单标签自己制作一个简单的表单页面-表单制作-小程序表单制作...
  20. 2021CSP复赛游记,总结与回顾

热门文章

  1. android字节流压缩,Android代码压缩工具R8详解 android.enableR8=true
  2. 数据备份数据迁移方案
  3. 2.ObjectArx .NET 二次开发入门(CAD 2016)
  4. Megatron-LM GPT2
  5. 【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案--6 提分方案
  6. 安卓Hacking Part 3:Broadcast Receivers攻防
  7. 天天加班,你以为你就可以升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰了么?
  8. LabVIEW编的上位机控制汇川PLCH5U和汇川伺服运动 ,海康威视相机视觉对位,LabVIEW通过网口控制汇川H5U和Ethercat伺服
  9. 解决win10“管理员已阻止你运行此应用”的方法
  10. EA中的图怎么缩小到可以一张A4纸打印出来