欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

托米搭积木

发布时间:2024/1/18 编程问答 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 托米搭积木 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
链接:https://www.nowcoder.com/acm/contest/111/F

来源:牛客网

Problem  Description:

小托米真的很可爱呀(>_<)
这天,可爱的小托米得到了n堆积木,且第i堆积木初始时有ai块积木.
小托米很快就喜欢上了玩积木.
他会作出三种操作:
1.把第v堆的积木数量更改为x.
2.在每堆积木的上面都加上y个积木.
3.数第q堆积木的积木个数.

由于这天可爱的小托米实在是太困了,所以他请你帮他完成这些操作.

Input:

第一行两个整数n,m.
第二行n个整数,第i个整数代表ai的值.
接下来m行,每行代表一个操作:
第一个整数t代表操作的类型
若t=1,则接下来两个整数v,x,代表操作1.
若t=2,则接下来一个整数y,代表操作2.

若t=3,则接下来一个整数q,代表操作3.

Output:

对于每个操作3,输出其对应的答案.

Sample  Input:

10 11
1 2 3 4 5 6 7 8 9 10
3 2
3 9
2 10
3 1
3 10
1 1 10
2 10
2 10
3 1
3 10

3 9

Sample  Output:

2
9
11
20
30
40

39

思路:这道题中操作2如果你用for(i=0;i<n;i++){  a [ i ]+=y;}这种方法的话会超时,因此要进行优化,即用flag做标记,计算出flag(flag用来统计一共要加多少y),然后经过一系列操作之后要输出a[ i ],就让初始值的a[ i ]+flag,就是最后a[ i ]的最终值,要注意的就是操作1,它不是让a[ v-1 ]=x,而是a[ v-1 ]=x-flag,具体操作可以看下面的代码。

My  DaiMa:

#include<stdio.h> #include<iostream> using namespace std; typedef long long ll; ll a[100003]; int main() {ll n,m,t,q,y,x,v;while(~scanf("%lld%lld",&n,&m)){int flag=0;for(int i=0;i<n;i++)scanf("%lld",&a[i]);while(m--){scanf("%lld",&t);if(t==3){scanf("%lld",&q);printf("%lld\n",a[q-1]+flag);//用初始的值加上flag就是a[q-1]最终的值}else if(t==1){scanf("%lld%lld",&v,&x);a[v-1]=x-flag;//如果不明白这里的话,可以带2个数进去试试}else if(t==2){scanf("%lld",&y);flag+=y;}}}return 0; }

总结

以上是生活随笔为你收集整理的托米搭积木的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。