题解 P2550 【[AHOI2001]彩票摇奖】

时间:2023-03-10 02:09:44
题解 P2550 【[AHOI2001]彩票摇奖】

题目链接

大家有没有发现数据范围好小呀

我们只需要开7~8的数组就好!!

中间比较的时候懒得用for循环比较了。直接爆搜。

废话不多说,直接上代码。

#include<bits/stdc++.h>
using namespace std;
int a[];//作为中奖号码
int b[];//作为每一回彩票号码
int c[];//作为中奖的等级
int main()
{
int n;
cin>>n;//彩票张数
for(int i=;i<;i++)
{
cin>>a[i];//输入中奖号码。
}
for(int i=;i<n;i++)//n张,循环n次
{
int sum=;//每一张相同的个数,每次循环初始化为0;
for(int j=;j<;j++)//输入彩票号
{
cin>>b[j];
}
for(int j=;j<;j++)//精髓。因为数据较小,所以每一回懒得用for循环对比,直接暴力比较
{
if(b[j]==a[]||b[j]==a[]) sum++;
else if(b[j]==a[]||b[j]==a[]) sum++;
else if(b[j]==a[]||b[j]==a[]) sum++;
else if(b[j]==a[]||b[j]==a[]) sum++;
}
c[sum-]+=;//注意点这里大家应该会有问题,一会就明白了。不过###一定要减一###不多说,自己想。
}
for(int i=;i>=;i--)//我们反序存的奖级。就反序输出就好啦。
{
cout<<c[i]<<" ";//输出
}
return ;//程序拜拜。
}

搜索还可以这么写

for(int j=;j<;j++)
{
for(int k=;k<;k++)
{
if(b[j]==a[k]) sum++;
}
}
c[sum-]+=;

好哒,没了