城市的税金——牛客网

城市的税金——牛客网

一、题目来源:
牛客网 2019年广东工业大学腾讯杯新生程序设计竞赛(同步赛)(重现赛)

二、题目内容:
影从者,并非真正的从者,而是一种’量产’从者,或是一种劣化从者。
而虚假的圣杯,准确说是残缺的圣杯,理所当然的只能召唤出影从者这种非正常使魔。但这也能称之为奇迹了,并不是凭依任何实体,而是自己创造出实体的魔术仪式。那家伙,也能称之为天才了吧。
虽然他想要完全掌控这虚假的圣杯,但是总有缺憾。
面对眼前这个从者(servant),我不知道该怎么办。他浑身上下都被不祥的黑雾包围着,连面貌都无法看清,很难说他到底还是不是保持清醒的状态。
「虽然能明显感觉到,你不是御主(master),但曾是吧」
「居然还保持着理智吗」我有些惊讶
「是啊,我才刚刚被圣杯召唤而来,但显然这圣杯很不对劲是吧」虽然无法看清他的表情,但我感觉到他是在苦笑「所以我也需要一个御主进行魔力供给」
「你是想让我和你签订契约么」
「不错,我相信你也是需要我的力量的吧」他似乎笑了「但是我也不能就这样简单的签订,如果你能回答我的问题,那么我就认可你吧」
「洗耳恭听」
「我曾是一名国王,也是一名十字军骑士。我征战过无数沙场,也攻克过无数的堡垒。这N座被我所征服的城市,要定期向我上贡一定的金额,但是计算税金的公式异常复杂和繁琐。而且随时都会有概率进行税金的修改。我会告诉你他们一开始所需要缴纳的税金,而且也会告诉你什么时候会对编号从L到R的城市进行税金修改,但当我向你提问的时候,你要回答我编号从L到R的城市当中,相同税金金额出现次数最多的出现次数」
「轻而易举,狮心王,理查一世」
输入描述:
第一行输入两个整数N,M (1<=N, M<=100),其中N表示理查一世所征服的城市个数,M表示理查一世对城市税金的修改次数和对税金的询问次数之和。

第二行输入N个整数pi (0<=pi<=109),表示N个城市最初所需缴纳的税金金额。
接下来M行,每行输入为以下两种中的其中一种:
1 L R, (1 <= L<=R <= N)表示对编号从L到R的城市进行税金修改, 其中修改公式为:p1=p0251%996404*123,(p0和p1分别代表修改前的税金和修改后的税金)。
2 L R, (1 <= L<=R <= N)表示此时理查一世需要知道编号从L到R的城市中,相同税金金额出现次数最多的金额的出现次数。

输出描述:
对于输入格式为’2 L R’的询问单独输出一行进行回答
示例1

输入
6 5
1 2 3 4 5 3
1 1 6
2 1 6
1 3 5
1 2 4
2 2 4

输出
2
1
说明
注意运算过程中所有数不超过long long的范围。
第一次操作后,6个数分别为12472692 24945384 37418076 397536 12870228 37418076。
第二次操作后,输出2(出现次数最多的是37418076)。
第三次操作后,6个数分别为12472692 24945384 34585632 13118688 41144976 37418076。
第四次操作后,6个数分别为12472692 6559344 2981520 36970848 41144976 37418076。
第五次操作后,输出1

三、代码:
下面展示一些 内联代码片

#include<iostream>
#include<string.h>
using namespace std;
long long arr[200];
int main()
{
    int n,m;
    cin>>n>>m;//n代表城市个数,m代表访问次数
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
    }
    for(int j=0;j<m;j++)
    {
        int mark,left,right,sta=0,flag=0,i;
        cin>>mark>>left>>right;
        if(mark==1)
            for(i=left-1;i<=right-1;i++)
                arr[i]=arr[i]*251%996*404*123;
        else{
            int maxmium=0;
            for(int t=left-1;t<=right-1;t++)
            {
                int temp=0;
                for(i=t+1;i<=right-1;i++)
                {
                    if(arr[t]==arr[i])
                    {
                        temp++;
                    }
                }
                if(temp>maxmium)
                    maxmium=temp;
            }
            cout<<maxmium+1<<endl;
        }
    }
    return 0;
}

四、思路
首先按照要求进行输入。
然后,注意数据类型!
由于每一次操作的时候都会取模,所以从最后结果来看,每一次税金不会大于995404123=49443540,似乎也是在int范围内的。但是实际上,它是先乘一个251再对996取模的,所以如果不用long型的数据类型,中间运算的数据会超出int范围,会出错。
接下来,对于m次的操作进行输入,然后if语句判断,如果第一个输入的数字是1的话,就直接进行运算。要是第一个数字是2,就对left到right区间内的数,用一个二重循环判断数组中每一个数的出现次数,并且和maxmium比较,保存最大值。

看着好简单啊是不是
对没错,它就是这么简单
但是我第一次写的时候居然没有一次写出来,为啥呢?因为没有想到用二重循环,想着把不重复的数据存储到另一个数组里面,然后。。。。反正就是很麻烦的一堆,然后写出了bug

教训:
这个故事告诉我们,对于一些处理量比较小的题目(毕竟这道题目的数据之后100个,真的很少啊!),一定要用思路上最简单、打起来最容易的方法!不要打半天打不出一个签到题!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值