题意:

      刚开始的时候给你一个序列,长度为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 不错的小想法题(逆向处理操作)的更多相关文章

  1. HDU - 5806 NanoApe Loves Sequence Ⅱ 想法题

    http://acm.hdu.edu.cn/showproblem.php?pid=5806 题意:给你一个n元素序列,求第k大的数大于等于m的子序列的个数. 题解:题目要求很奇怪,很多头绪但写不出, ...

  2. hdu3006 状态压缩+位运算+hash(小想法题)

    题意:        给了n个集合,问你这n个集合可以组合出多少种集合,可以自己,也可以两个,也可以三个....也可以n个集合组在一起. 思路:       是个小想法题目,要用到二进制压缩,位运算, ...

  3. HDU 4972 Bisharp and Charizard 想法题

    Bisharp and Charizard Time Limit: 1 Sec  Memory Limit: 256 MB Description Dragon is watching NBA. He ...

  4. HDU - 5969 最大的位或 想法题

    http://acm.hdu.edu.cn/showproblem.php?pid=5969 (合肥)区域赛签到题...orz 题意:给你l,r,求x|y的max,x,y满足l<=x<=y ...

  5. HDU 5632 Rikka with Array [想法题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5632 ------------------------------------------------ ...

  6. HDU 4638 树状数组 想法题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4638 解题思路: 题意为询问一段区间里的数能组成多少段连续的数.先考虑从左往右一个数一个数添加,考虑当 ...

  7. HDU 5908 Abelian Period(暴力+想法题)

    传送门 Description Let S be a number string, and occ(S,x) means the times that number x occurs in S. i. ...

  8. HDU 5635 ——LCP Array ——————【想法题】

    LCP Array Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  9. hdu 4540 威威猫系列故事——打地鼠 dp小水题

    威威猫系列故事——打地鼠 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total ...

随机推荐

  1. tibco EMS 8.2.0安装

    安装环境 序号 项目 值 1 OS版本 Red Hat Enterprise Linux Server release 7.1 (Maipo) 2 内核版本 3.10.0-229.el7.x86_64 ...

  2. 剑指 Offer 62. 圆圈中最后剩下的数字 + 约瑟夫环问题

    剑指 Offer 62. 圆圈中最后剩下的数字 Offer_62 题目描述 方法一:使用链表模拟 这种方法是暴力方法,时间复杂度为O(nm),在本题中数据量过大会超时. 方法二:递归方法 packag ...

  3. LeetCode-宝石与石头

    宝石与石头 LeetCode-771 使用哈希表. 这里使用内置算法库中的map /** * 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头.  * S 中每个字符代表了一种你拥有的 ...

  4. 【pytest官方文档】解读fixtures - 7. Teardown处理,yield和addfinalizer

    当我们运行测试函数时,我们希望确保测试函数在运行结束后,可以自己清理掉对环境的影响. 这样的话,它们就不会干扰任何其他的测试函数,更不会日积月累的留下越来越多的测试数据. 用过unittest的朋友相 ...

  5. 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(概述篇)

    SDK 开发 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(理念与设计原则篇) 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(开发基础篇) 系列 Snuba:Sentr ...

  6. Git详解和Github的使用

    Git和Github的概念: Git是分布式版本管理系统,简单说就是一个软件,用于记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的软件. Github是一个为用户提供Git服务的网站,简单说 ...

  7. 全真教程:Windows环境Jupyter Notebook安装、运行和工作文件夹配置

    全真教程:Windows环境Jupyter Notebook安装.运行和工作文件夹配置 @ 目录 全真教程:Windows环境Jupyter Notebook安装.运行和工作文件夹配置 一.Jupyt ...

  8. 安卓Media相关类测试demo

    最近在研究安卓系统给app开发者提供的标准Media相关的工具类,本人做了一些demo来测试这些工具的使用方法. 本demo包含若干apk源码,需要说明以下几点: 1. 构建方式 Makefile使用 ...

  9. 使用quartz.net 完成一个winform版的任务提醒工具

    这个任务提醒工具是这样的,是每日定时执行,触发时间为 小时和分钟.每天早上来就可以把当天要做的添加到datagridview中,只记录了标题和内容和时间.双击dgv就查看内容. 如果每天计划重复,也可 ...

  10. java例题_40 字母字符串转数组后排序

    1 /*40 [程序 40 字符串排序] 输入一个字符串数组,按照字母表的降序对这些字符串进行排序. 2 题目:字符串排序. 3 */ 4 5 /*分析 6 * 1.从键盘得到一个纯字母的字符串 7 ...