hdu 5063 不错的小想法题(逆向处理操作)
题意:
刚开始的时候给你一个序列,长度为n,分别为a[1]=1,a[2]=2,a[3]=3,a[4]=4...a[n]=n,然后有4种操作如下:
Type1: O 1 call fun1();
Type2: O 2 call fun2();
Type3: O 3 call fun3();
Type4: Q i问当前a[i]的值,****** 询问最多50次*******,输出%1e9+7.
Global Variables: a[1…n],b[1…n];
fun1() {
index=1;
for(i=1; i<=n; i +=2)
b[index++]=a[i];
for(i=2; i<=n; i +=2)
b[index++]=a[i];
for(i=1; i<=n; ++i)
a[i]=b[i];
}
fun2() {
L = 1;R = n;
while(L<R) {
Swap(a[L], a[R]);
++L;--R;
}
}
fun3() {
for(i=1; i<=n; ++i)
a[i]=a[i]*a[i];
}
思路:
感觉这个题目不错,首先我们要从题目给的信息里面获得重要的东西,比如这个题目最重要的是四种操作中询问的的操作不会大于50,这个非常重要,操作数一共是100000,而这个是50,50/100000的比率,现在我们来分析这个题目,首先,直接模拟肯定是不行的,这个我用我解释,其次就是我们怎么利用好这个50,我们对于每一次询问,问的只是第i个位置的值,而所有的操作中对于每各位置的处理都是独立的,就是我们变换的只是位置而已,对于每一位,我们不用管别的位数怎么变,只要知道自己该到那个位置就行了,那么这50次询问也只是关心的一位,所以我们可以先把所有的操作存起来<也可以说是离线?>,然后对于每一个询问,我们就把当前询问的这个位置逆序变换到当初的位置,这样的时间复杂度就是50*10W,完全可以接受,再就是怎么还原回去,这个虽然比较简单,我还是说下吧,省着有学弟疑问,对于第一和第二种操作,我们每次还原到上一步就是先断定他是奇数的第几个还是偶数的第几个,然后在算值<具体看代码>,对于)O 3这个更好弄,只要开始变量记录
下个数,最后乘回去就行了,<这个地方不是a^b是平方后再平方再平方...别弄错了>,遇到询问就直接跳过去,询问不改变位置,大体就是这样,具体看代码吧,这个题目要好好做做,能从中学到不少有用的东西。
#include<stdio.h> #include<string.h> typedef struct {int k; }STAR;STAR Q[110000];int poww(int a ,int b) {__int64 c = a;for(int i = 2 ;i <= b ;i ++){c *= c;c %= 1000000007;}return (int)c; }int main () {int i ,j ,n ,m ,a ,t;char str[4];scanf("%d" ,&t);while(t --){scanf("%d %d" ,&n ,&m);for(i = 1 ;i <= m ;i ++){scanf("%s %d" ,str ,&a);if(str[0] == 'O') Q[i].k = a;else Q[i].k = a + 3;}for(i = 1 ;i <= m ;i ++){ if(Q[i].k > 3){int sp = 1 ,now = Q[i].k - 3;for(j = i - 1 ;j >= 1 ;j --){if(Q[j].k == 3) sp ++;else if(Q[j].k > 3) continue;else{if(Q[j].k == 1){if(now <= (n + 1) / 2) now = now * 2 - 1;else now = 2 * (now - (n + 1) / 2);}else now = n - now + 1;}}printf("%d\n" ,poww(now ,sp));}}}return 0; }
hdu 5063 不错的小想法题(逆向处理操作)相关推荐
- hdu3006 状态压缩+位运算+hash(小想法题)
题意: 给了n个集合,问你这n个集合可以组合出多少种集合,可以自己,也可以两个,也可以三个....也可以n个集合组在一起. 思路: 是个小想法题目,要用到二进制压缩,位运算, ...
- hdu 4541 Ten Googol 小水题
Ten Googol Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total S ...
- 小 问 题 难 倒 你
小 问 题 难 倒 你 消除疲劳.提高积极性的游戏 游戏 4--小问题难倒你 通过玩这个游戏可以拓展学员的思路, 帮助他们开拓思路并改进工作方法.作为课间或 开学第一课使用还是可以的,可以起到活跃气氛 ...
- win10系统更新在哪_一键关闭win10系统更新,一款不错的小工具
首先得划重点了,最近推文的打开量越来越低了,这是因为新版微信公众号的推文展示不再按照时间显示了,而是按照在看,星标等阅读数据打开的. 所以不想错过阿俊的每日资源分享记得把公众号加星标哦,推文点个在看, ...
- 大疆网上测评题库_大疆校招笔试题及参考(一个小编程题)
大疆 科技的校招 笔试 题(的一个小编程题) 底下的答案仅供参考. // 两个小车,走一步能量消耗 1 ,方向为 1 向右, -1 为向左,首先输入路途长 度,然后输入两行,每行第一个为小车的能量,第 ...
- 对于毕业论文的一点小想法
这两天看了几篇学位论文,有一些小想法. 基于中草药语义网的自动问答系统的研究与实现,基于语义网的旅游业自动问答系统的研究,主要用到自然语言处理和机器学习相关知识,专注小领域的问答系统.目前我主要想做的 ...
- 软件测试工程师应该具备的素质---菜鸟的小想法
菜鸟的测试之路 如何做好一名软件测试人员? 一名好的测试工程师应该具备什么哪些素质? 这两个问题是每个测试员经常需要面对的问题,也是测试员经常考虑的问题,一名测试员最基本的素质是什么呢? 一个菜鸟的小 ...
- (政府 + 物业 + 居民 + 第三方)联合打造智慧社区的小想法
首先我们要搞清楚一个问题,什么是智慧社区? 官方给出的解释是:智慧社区是指充分利用物联网.云计算.移动互联网等新一代信息技术的集成应用,为社区居民提供一个安全.舒适.便利的现代化.智慧化生活环境,从而 ...
- HDU 4857 逃生 拓扑排序好题 第一次做CLJ出的题
逃生 Problem Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b ...
最新文章
- 设计模式--依然创建者
- entity framework5 sqlserver2005 事务(TransactionScope)报未启用MSDTC错误解决办法
- 【C语言进阶深度学习记录】七 C语言中的循环语句
- 利用pre-compiled headers技术以加速编译速度(一)
- 2.WindowsServer2012R2装完的一些友好化设置
- 最大熵学习笔记(三)最大熵模型
- (十九)ArcGIS JS 加载WMS服务(超图示例)
- android textview 动态高度自适应,TextView自适应高度(解决_UITextContainerView布局问题)...
- [Buzz.Today]2012.04.29
- Class.forName()、Class.forName().newInstance() 、New 三者区别!
- Kubernetes 云原生 容器类型有哪些
- Learning Cocos2d-x for WP8(4)——中文显示
- 【数学问题2】动力学建模
- 关于“商用超极本应用体验分享沙龙”的体验之旅——商用超极本的崛起之路、真机实测、优缺点分析与使用评价
- selenium模拟鼠标滑动
- tcr历史比赛竞赛规则
- NetSuite 精益实施的ALV实践
- 豆果美食APP,看一下都给[Python爬虫爱好者]提供了哪些接口
- 答应了邮件offer还能反悔吗?
- 上海市犬伤处置门诊目录(上海哪些医院可以打狂犬疫苗)
热门文章
- Fragment第二次加载没有数据
- 跨域cookie传递
- 在WAS中得到OracleConnection
- IIS 承载的WCF服务失败
- 关于架构的一点思考(一)
- solr的认识、linux下安装、java下使用(含下载资源)
- 通过angular.js实现MVC的基本步骤
- 【学习记录】无法找到“Procedural Foliage Spawner”
- 从LINQ开始之LINQ to Objects(下)
- js 调用C#.NET后台方法 转载自:http://www.cnblogs.com/lizhao/archive/2010/11/23/1990436.html...