| 魔兽争霸 |
| 难度级别:C; 运行时间限制:1000ms; 运行空间限制:262144KB; 代码长度限制:2000000B |
|
试题描述
|
|
小x正在销魂地玩魔兽
他正控制着死亡骑士和n个食尸鬼(编号1~n)去打猎死亡骑士有个魔法,叫做“死亡缠绕”,可以给食尸鬼补充HP战斗过程中敌人会对食尸鬼实施攻击,食尸鬼的HP会减少,小x希望随时知道自己部队的情况,即HP值第k多的食尸鬼有多少HP,以便决定如何施放魔法.请同学们帮助他:) 小x向你发出3种信号:(下划线在输入数据中表现为空格) A_i_a表示敌军向第i个食尸鬼发出了攻击,并使第i个食尸鬼损失了a点HP,如果它的HP<=0,那么这个食尸鬼就死了(Undead也是要死的……)。 敌军不会攻击一个已死的食尸鬼。 C_i_a 表示死亡骑士向第i个食尸鬼放出了死亡缠绕,并使其增加了a点HP。 HP值没有上限。 死亡骑士不会向一个已死的食尸鬼发出死亡缠绕 Q_k 表示小x向你发出询问 |
|
输入
|
|
第一行,一个正整数 n
以后n个整数 表示n个食尸鬼的初始HP值 接着一个正整数m 以下m行 每行一个小x发出的信号 |
|
输出
|
|
对于小x的每个询问,输出HP第k多的食尸鬼有多少HP,如果食尸鬼总数不足k个,输出-1。每个一行数。
最后一行输出一个数:战斗结束后剩余的食尸鬼数 |
|
输入示例
|
|
5
1 2 3 4 5 10 Q 2 A 4 6 C 1 4 Q 2 A 2 1 A 3 3 A 1 3 Q 4 C 2 10 Q 1 |
|
输出示例
|
|
4
5 -1 11 3 |
|
其他说明
|
|
数据范围:
40%的数据 n<=3000 m<=5000 70%的数据 n<=8000 m<=10000 100%的数据 n<=30000 m<=50000 90%的数据随机生成 食尸鬼HP没有上限 数据保证任意时刻食尸鬼的HP值在longint范围内 数据保证A和C命令中的食尸鬼是活着的 输入数据中没有多余空格、换行 |
| 东风谷早苗 |
| 难度级别:C; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B |
|
试题描述
|
|
在幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女。某一天,早苗终于入手了最新款的钢达姆模型。作为最新的钢达姆,当然有了与以往不同的功能了,那就是它能够自动行走,厉害吧(好吧,我自重)。早苗的新模型可以按照输入的命令进行移动,命令包含’E’、’S’、’W’、’N’四种,分别对应四个不同的方向,依次为东、南、西、北。执行某个命令时,它会向着对应方向移动一个单位。作为新型机器人,自然不会只单单执行一个命令,它可以执行命令串。对于输入的命令串,每一秒它会按照命令行动一次。而执行完命令串最后一个命令后,会自动从头开始循环。在0时刻时早苗将钢达姆放置在了(0,0)的位置,并且输入了命令串。她想要知道T秒后钢达姆所在的位置坐标。
|
|
输入
|
|
第1行:一个字符串,表示早苗输入的命令串,保证至少有1个命令
第2行:一个正整数T |
|
输出
|
|
第1行:两个整数,表示T秒时,钢达姆的坐标
|
|
输入示例
|
|
NSWWNSNEEWN
12 |
|
输出示例
|
|
-1 3
|
|
其他说明
|
|
数据范围:
对于60%的数据:T <= 500,000且命令串长度 <= 5,000 对于100%的数据:T <= 2,000,000,000且命令串长度<= 5,000 |
。。。
#include<cstdio> #include<cctype> #include<queue> #include<cmath> #include<cstring> #include<algorithm> #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define ren for(int i=first[x];i!=-1;i=next[i]) using namespace std; inline int read() { int x=0,f=1;char c=getchar(); for(;!isdigit(c);c=getchar()) if(c=='-') f=-1; for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f; } const int maxn=5010; char s[maxn]; int main() { scanf("%s",s);int n=strlen(s); int T=read(); int x0=0,y0=0; rep(i,0,n-1) { if(s[i]=='W') x0--; if(s[i]=='E') x0++; if(s[i]=='N') y0++; if(s[i]=='S') y0--; } int x=x0*(T/n),y=y0*(T/n); rep(i,0,(T%n)-1) { if(s[i]=='W') x--; if(s[i]=='E') x++; if(s[i]=='N') y++; if(s[i]=='S') y--; } printf("%d %d\n",x,y); return 0; }