【牛客网】用户喜好编程题 第1行为n代表用户的个数 第2行为n个整数,第i个代表用户标号为i的用户对某类文章的喜好度 第3行为一个正整数q代表查询的组数 第4行到第(3+q)行,每行包含3个整数l,r

只是写算法的话感觉还是c来的快
/**
输入描述:
输入: 第1行为n代表用户的个数 第2行为n个整数,第i个代表用户标号为i的用户对某类文章的喜好度
第3行为一个正整数q代表查询的组数 第4行到第(3+q)行,每行包含3个整数l,r,k代表一组查询,即标号为l<=i<=r的用户中对这类文章喜好值为k的用户的个数。
数据范围n <= 300000,q<=300000 k是整型
输出描述:
输出:一共q行,每行一个整数代表喜好值为k的用户的个数
输入例子1:
5
1 2 3 3 5
3
1 2 1
2 4 5
3 5 3
输出例子1:
1
0
2
例子说明1:
样例解释:
有5个用户,喜好值为分别为1、2、3、3、5,
第一组询问对于标号[1,2]的用户喜好值为1的用户的个数是1
第二组询问对于标号[2,4]的用户喜好值为5的用户的个数是0
第三组询问对于标号[3,5]的用户喜好值为3的用户的个数是2
**/

#include <stdio.h>
#include <stdlib.h>
int main()
{
    //载入数据
    int user_num=0;
    int i=0;
    scanf("%d",&user_num);
    int prefer[300000];
    for(i=0; i<user_num; i++)
    {
        scanf("%d",&prefer[i]);
    }
    int group_num=0;
    int group[300000][3]={0};
    int j =0;
    int k=0;
    int num=0;
    scanf("%d",&group_num);
    for(i=0; i<group_num; i++)
    {
        num = 0;
        for(j=0; j<3; j++)
        {
            scanf("%d",&group[i][j]);
        }
        for(k=group[i][0]-1; k<group[i][1]; k++)
        {
            if(prefer[k]==group[i][2])
            {
                num+=1;
            }
            //printf("#k%d:%d**%d\n",k,prefer[k],group[i][2]);
        }
        printf("%d\n",num);
    }
    return 0;
}

发布了140 篇原创文章 · 获赞 114 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qinglingLS/article/details/100111329
今日推荐