2306 - 竞技游戏
时间限制 : 1 秒
内存限制 : 32 MB
小灰灰和小东东在玩一种竞技游戏。在游戏中,小灰灰给小东东由n个正整数组成的序列以及m条操作指令,需要小东东按照指令来对n个整数进行操作。其中每条指令都包括二个整数(a, b),意义如下:
如果a大于0,表示将序列中第b个数乘于2;
如果a小于0,表示将序列中第b个数加上2;
如果a等于0,则忽略此条指令。
游戏结束后,小东东需要求出序列中的最大值。现在小东东求助于你,希望你能用计算机编程求出他需要的答案。题目保证计算结果在int的表示范围内。
题目输入
输入数据第一行为一整数T,表示有T组数据。每组输入数据第一行有二个整数n, m, (1 <= n <= 100), (1 <= m <= 100), 第二行有n个整数(1 ~100),表示初始序列,编号从1...n。接着是m行表示m条指令,每行共有2个用空格隔开的整数a b,(-50<= a <= 50), (1 <= b <= n)。
题目输出
对于每组数据,输出一个整数占一行,表示操作后的序列中的最大整数。
输入/输出样例
输入格式
2 2 2 1 2 1 1 -1 2 3 4 1 5 6 1 1 1 1 0 1 -1 1
输出格式
4 6
C语言解答
#include<stdio.h> int main() { int T,n,m,i,a,b,max,s[101]; scanf("%d",&T); while(T--) { scanf("%d %d",&n,&m); for(i=1;i<=n;i++) scanf("%d",&s[i]); while(m--) { scanf("%d %d",&a,&b); if(a>0) s[b]=s[b]*2; else if(a<0) s[b]=s[b]+2; } max=s[1]; for(i=1;i<=n;i++) if(max<s[i]) max=s[i]; printf("%d\n",max); } return 0; }
C++解答
#include<bits/stdc++.h> using namespace std; int T,n,m,x[105]; int main() { cin>>T; while(T--) { cin>>n>>m; for(int i=1;i<=n;i++) cin>>x[i]; int a,b; for(int i=1;i<=m;i++) { cin>>a>>b; if(a>0) x[b]=x[b]*2; if(a<0) x[b]=x[b]+2; } sort(x+1,x+n+1); cout<<x[n]<<endl; } return 0; }