UESTC-2020ACM练习二J题 昊昊爱运动

昊昊喜欢运动
他N天内会参加M种运动(每种运动用一个[1,m]的整数表示)
舍友有Q个问题:昊昊第ll天到第rr天参加了多少种不同的运动

Standard Input
输入两个数N, M (1≤N≤2000, 1≤M≤100);

输入N个数ai
表示在第i天昊昊做了第ai类型的运动;
输入一个数Q(1≤Q≤106);

输入Q行 每行两个数 l, r(1≤l≤r≤n);

Standard Output
一共Q行
每一行输出一个数 表示昊昊在第l天到第r天一共做了多少种活动

Samples

Input
5 3
1 2 3 2 2
3
1 4
2 4
1 5

Output
3
2
3

这一题可以直接打表,求出所有l-r的情况,复杂度是O(n2);输出的复杂度是O(Q);总体应该不会超时;

但是这题一直TLE,苦思冥想后试着把cin改成了scanfAC

虽然知道cin的效率低于scanf,但是觉得2000组数据不算太大,不会有太大差异,然而事实是………………
ACM提交页面
所以我测了一下这俩玩意读一千万组数时的时间差异||||

#include<iostream>
#include<cstdio>
using namespace std;
#include<ctime>
#define N 10000000
int a[N];
int main()
{
    clock_t start,end;
    start=clock();
    for(int i=0;i<N;i++)
        cin>>a[i];
    end=clock();
    double t=(double)(end-start)/CLOCKS_PER_SEC;
    cout<<"cin time: "<<t<<" s"<<endl;

    start=clock();
    for(int i=0;i<N;i++)
        scanf("%d",a+i);
    end=clock();
    t=(double)(end-start)/CLOCKS_PER_SEC;
    cout<<"scanf time: "<<t<<" s"<<endl;
    return 0;
}

cin耗时39.987s ; scanf耗时4.77s 。
所以刷题时尽量用scanf读数据吧(哭死)

下面贴一下本题打表程序

#include <iostream>
#include<cstdio>
#include <cstring>
using namespace std;
#define N 2005
int a[N];
int ANS[N][N];
int vis[N];
int main()
{

    int n, m;
    scanf("%d %d",&n,&m);
    int ans = 0;
    for(int i = 1; i <= n; i++)
        scanf("%d",a+i);
    for(int i = 1; i <= n; i++)
    {
        memset(vis,0,sizeof(vis));
        ans = 0;
        for(int j = i; j <= n; j++)
        {
            if(vis[a[j]]==0)
            {
                ans++;
                vis[a[j]]++;
            }
            ANS[i][j] = ans;//第i天到第j天的种数
        }
    }
    int l, r, Q;
    cin>>Q;
    while(Q--)
    {
        scanf("%d %d",&l,&r);
        cout<<ANS[l][r]<<endl;
    }
    return 0;
}

每一个蒟蒻的去世,没有哪一个神犇是无辜的哈哈哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想打球的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值