P2550 [AHOI2001] 彩票摇奖
1.题目介绍
[AHOI2001] 彩票摇奖
题目描述
为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。该彩票的规则是:
- 每张彩票上印有
个各不相同的号码,且这些号码的取值范围为 。 - 每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。
- 共设置
个奖项,特等奖和一等奖至六等奖。
兑奖规则如下:
- 特等奖:要求彩票上
个号码都出现在中奖号码中。 - 一等奖:要求彩票上有
个号码出现在中奖号码中。 - 二等奖:要求彩票上有
个号码出现在中奖号码中。 - 三等奖:要求彩票上有
个号码出现在中奖号码中。 - 四等奖:要求彩票上有
个号码出现在中奖号码中。 - 五等奖:要求彩票上有
个号码出现在中奖号码中。 - 六等奖:要求彩票上有
个号码出现在中奖号码中。
注:兑奖时并不考虑彩票上的号码和中奖号码中的各个号码出现的位置。例如,中奖号码为
现已知中奖号码和小明买的若干张彩票的号码,请你写一个程序帮助小明判断他买的彩票的中奖情况。
输入格式
输入的第一行只有一个自然数
第二行存放了
在随后的
输出格式
依次输出小明所买的彩票的中奖情况(中奖的张数),首先输出特等奖的中奖张数,然后依次输出一等奖至六等奖的中奖张数。
样例 #1
样例输入 #1
2
23 31 1 14 19 17 18
12 8 9 23 1 16 7
11 7 10 21 2 9 31
样例输出 #1
0 0 0 0 0 1 1
提示
数据规模与约定
对于
2.题解
2.1 模拟
思路
这里其实没必要用哈希表的,但是如果这里的位数不是7,而是n的时候,哈希表便能将时间复杂度从O(N^2)降为O(N)
题解
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
unordered_set<int> uset(7);
for(int i = 0; i < 7; i++){
int temp;
cin >> temp;
uset.emplace(temp);
}
vector<int> ans(7);
for(int i = 0; i < n; i++){
int count = 0;
for(int j = 0; j < 7; j++){
int temp;
cin >> temp;
if(uset.count(temp)) count++;
}
if (count > 0) ans[count-1]++;
}
for(auto it = ans.rbegin(); it != ans.rend(); it++){
cout << *it << ' ';
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了