觉醒力量 (hidpower)

题目描述

【题目背景】

从前有一款非常火的游戏被人们称为pokemon,从最初的红绿蓝黄版直到现在的XY版,都受到世界各地小朋友和大朋友们的喜爱。

【题意描述】

作为一名高玩,QQ最近在研究pokemon的觉醒力量。

觉醒力量是一个属性和威力都不确定的神奇技能,它基于pokemon的个体值进行一系列复杂的计算,最后得出属性和威力。由于属性可以扩充打击面,而威力则保证了打击力度,这使得觉醒力量成为一个不可或缺的技能。一只满威力觉醒冰的电龙可以击败草系或地面系的对手,然而在没有觉醒力量的情况下这几乎不可能。

由于不同的怪需要不同属性的觉醒力量,而每种觉醒力量的最大威力又有差别,所以获取觉醒力量的计算公式就显得尤为重要。经过搜集资料,QQ了解了计算公式的以下几个性质:

1、计算公式由恰好n个步骤组成,每个步骤由运算类型和参数组成。

2、运算类型包括加法,减法,乘法和乘方。

3、运算不考虑优先级,输入总是运算的第一参数,而结果代入下一运算步骤。

比如,共计4个运算步骤:+1,*4,-9,^7(这里的^是乘方,不是异或)

如果代入的数据是2,计算过程是:2+1=3,3*4=12,12-9=3,3^7=2187

如果代入的数据是1,计算过程则为:1+1=2,2*4=8,8-9=-1,(-1)^7=-1

觉醒力量的属性决定于最终答案对17的模(若为负数取正模),得数为0~16时分别对应的属性为:

0:Fight     1:Flying 2:Poison 3:Ground 4:Rock

5:Bug    6:Ghost  7:Steel     8:Fire   9:Water

10:Grass    11:Electric 12:Psychic  13:Ice   14:Dragon

15:Dark     16:Fairy

而觉醒力量的威力决定于最终答案对46189的模。(提示,46189^2=2133423721)

所以上述两种情况分别是威力2187的觉醒电和威力46188的觉醒妖(满威力觉醒妖)。

现在,QQ需要通过不断的实践来修正这个计算公式。QQ有一个初始预估的计算公式,每次他会使用公式计算觉醒力量的属性和威力,和实际情况比对,进而修正公式或继续计算。然而,代入如此长的一个公式对于他而言有些吃力,所以他希望你来帮他完成这件事情。

输入

第一行,两个数n,m,表示步骤数和操作数。

接下来一行,描述n个步骤,每个步骤由一个运算符和一个参数构成。步骤之间由一个或多个空格分隔。

接下来m行,描述m个操作,有以下两种格式

1 x 其中x是一个整数,表示将x代入公式计算

2 x p 其中x是一个整数,p是一个步骤(格式同上),表示将第x个步骤替换为p

输出

对于每个1类型操作,输出一行,表示觉醒力量的属性和威力,空格分隔。

样例输入

4 5
+1 *4 -9 ^7
1 2
1 1
2 1 -4
1 2
1 1

样例输出

Electric 2187
Fairy 46188
Fight 4403
Rock 5325

提示

【数据规模和约定】

对于10%的数据,n,m<=5000

另有20%的数据,没有2类操作

对于80%的数据,n,m<=30000

奇数编号测试点没有^操作。

对于100%的数据,n,m<=100000,2操作中1<=x<=n,运算中运算符为+-*^之一,所有其他整数均小于2^31。

solution

先考虑第一问

输入一个数,输出经过运算后%17的结果,支持修改运算符

用线段树维护,另ans[i]表示把i放入(L,R)的结果,i为0~16

tree[k].ans[i]=tree[k*2+1].ans[tree[k*2].ans[i]];

这样就可以了

第二问可以发现

46189=11*13*17*19

通过构造同余方程可用CRT解出

然而我写了暴力。。

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 100005
using namespace std;
int n,m,Mod[4]={11,13,17,19},t1,t2;
struct node{
int v,op;
}s[maxn];
char ch[20];
struct no{
int l,r,v[4][20];
}tree[maxn*4];
const char sh[17][10]={
"Fight","Flying","Poison","Ground","Rock","Bug","Ghost","Steel","Fire",
"Water","Grass","Electric","Psychic","Ice","Dragon","Dark","Fairy"
};
int val(int k,node a,int mod){
long long ans;
if(a.op==1)ans=(k+a.v)%mod;
if(a.op==2)ans=(k-a.v)%mod;
if(a.op==3)ans=(k*(a.v%mod))%mod;
if(a.op==4){
long long p=k;ans=1;
while(a.v){
if(a.v&1)ans*=p;
p*=p;p%=mod;ans%=mod,a.v/=2;
}
}
ans=(ans%mod+mod)%mod;
return (int)ans;
}
void wh(int k){
for(int i=0;i<4;i++){
for(int j=0;j<20;j++)
tree[k].v[i][j]=tree[k*2+1].v[i][tree[k*2].v[i][j]];
}
}
void build(int k,int L,int R){
tree[k].l=L,tree[k].r=R;
if(L==R){
for(int i=0;i<4;i++){
for(int j=0;j<20;j++)
tree[k].v[i][j]=val(j,s[L],Mod[i]);
}
return;
}
int mid=L+R>>1;
build(k*2,L,mid);build(k*2+1,mid+1,R);
wh(k);
}
void outp(int k){
int x=tree[1].v[2][k%17];
printf("%s ",sh[x]);
int ans[4];
for(int i=0;i<4;i++){
ans[i]=tree[1].v[i][(k%Mod[i])];
}
for(int i=ans[3];i<=46188;i+=19){
bool fl=0;
for(int j=0;j<3;j++){
if((i%Mod[j])!=ans[j]){
fl=1;break;
}
}
if(!fl){printf("%d\n",i);return;}
}
}
node get(){
node fs;
scanf(" %s",ch);
int len=strlen(ch);
if(ch[0]=='+')fs.op=1;
if(ch[0]=='-')fs.op=2;
if(ch[0]=='*')fs.op=3;
if(ch[0]=='^')fs.op=4;
int vv=0;
for(int j=1;j<len;j++)vv=vv*10+ch[j]-'0';
fs.v=vv;
return fs;
}
void lian(int k,int pl,node a){
if(tree[k].l==tree[k].r){
for(int i=0;i<4;i++){
for(int j=0;j<20;j++)
tree[k].v[i][j]=val(j,a,Mod[i]);
}
return;
}
int mid=tree[k].l+tree[k].r>>1;
if(pl<=mid)lian(k*2,pl,a);
else lian(k*2+1,pl,a);
wh(k);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)s[i]=get();
build(1,1,n);
for(int i=1;i<=m;i++){
int t;scanf("%d",&t);
if(t==1){
scanf("%d",&t1);
outp(t1);
}
else {
int pl;scanf("%d",&pl);
node xx;
xx=get();
lian(1,pl,xx);
}
}
return 0;
}

觉醒力量 (hidpower)的更多相关文章

  1. [转帖]中国AI芯“觉醒”的五年

    中国AI芯“觉醒”的五年 https://www.cnbeta.com/articles/tech/857863.htm 原来 海思的营收已经超过了按摩店(AMD) 没想到.. 十多款芯片问世,多起并 ...

  2. (原创)即使最可怕的自然力量,也不失美丽——火山喷发(摄影,欣赏)

    文中图片摘自腾讯文化:www.cal.qq.com 1.Abstract     最可怕的力量也潜含着最美丽的风景奇观,虽然不能亲眼目睹,但透过大师的视角,一样也能体会到自然力量撼动的美丽. 2.Co ...

  3. Ubuntu的力量何在?

    = 怎样正确评价Ubuntu,这不是一个简单问题.Ubuntu的 力量何在?它的意义何在?这都是须要认真研究的. 实际上,Uuntu 14.04 LTS公布之后,并没有引起预期的热烈反响.这是什么原因 ...

  4. 我们都忽略了Html5的力量,如果只看成一种技术就大错特错了!

    第一部分:Html5市场的力量 我们太忽略Html5的市场力量了.如果你把Html5当作一种技术,就大错特错了!忘掉你的产品,忘掉你的技术,想想移动时代的信息传播和消费场景.作为2B,我们实在是没有重 ...

  5. 开源力量公开课第三十期- 跟我一起玩转OpenStack

    开源力量公开课第三十期- 跟我一起玩转OpenStack 开课时间:2013年9月10日 18:30 - 21:30 形式:现场(北京3W咖啡) + 线上直播,   免费报名:http://www.o ...

  6. 如何在github中贡献自己的力量

    如何参与github的开源项目? 1.找一个发出“pull requests”的项目.有以下几个方法:最简单的方式是,读项目的readme文件.它会告诉你,项目的拥有者是否急切的需要协助.如果read ...

  7. SSM框架开发web项目系列(二) MyBatis真正的力量

    前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBa ...

  8. 看见的力量 – (I) 解题的思维

    本文转自台湾李智桦老师的博客,原文地址 这篇文章:已经梗了我三个多星期了.这期间飞了二次大陆做演讲.往返几个大城市做教授敏捷开发运用在精实创业的课程.教材内容都是简体的,它们始终没有机会在国内用上,心 ...

  9. (转) 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文)

    本文转自:http://mp.weixin.qq.com/s/aAHbybdbs_GtY8OyU6h5WA 专题 | 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文) 原创 201 ...

随机推荐

  1. python_57_高阶函数

    变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数. def add(a,b,f): return f(a)+f(b) res=add(-3,- ...

  2. double类型的小数,四舍五入保留两位小数

    import java.math.BigDecimal; public class Kewai{ public static void main(String[] args) { double f = ...

  3. 3170: [Tjoi2013]松鼠聚会

    Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1804  Solved: 968[Submit][Status][Discuss] Descript ...

  4. java设计模式1--单例模式

    1:单例模式简介 单例模式是一种常用的软件设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供唯一的实例.总而言之就是在系统中只会存在一个对象,其中的数据是共享的 特点: 单例类只能有一 ...

  5. 【JAVA】mac配置java环境变量

    如果用bash,修改~/.bash_profile 或 ~/.profile: 如果用zsh,修改-/.zshrc 修改这些文件之后,重修打开terminal,配置不会丢 首先确保已经安装了jdk: ...

  6. 让你提高效率的 Linux 技巧

    想要在 Linux 命令行工作中提高效率,你需要使用一些技巧. 巧妙的 Linux 命令行技巧能让你节省时间.避免出错,还能让你记住和复用各种复杂的命令,专注在需要做的事情本身,而不是你要怎么做.以下 ...

  7. JS:字符串转成json数据,和json转成字符串方法 iframe获取父级传过来的数据

    字符串转成json数据,和json转成字符串方法 //转为JSON adinfo=JSON.parse(adinfo) //转为字符串 adinfo=JSON.stringify(adinfo) 大概 ...

  8. Darwin's Letter【达尔文的信】

    Darwin's Letter A letter written by Charles Darwin in 1875 has been returned to the Smithsonian Inst ...

  9. Memory loss【记忆缺失】

    Memory Loss Losing your ability to think and remember is pretty scary. We know the risk of dementia ...

  10. STM32串口中断实例二

    int main(void) { uint8_t a=;//LED高低电压控制 /* System Clocks Configuration */ RCC_Configuration(); //系统时 ...