题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805263624683520
坑点:
- 看清题目,是求错最多的选项,而不是错最多的题目中错最多的选项
- 只得50%那种题目,不算错
- 正确的选项没被选上,那个 选项也算错,在错题中
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct St
{
int fs,gs,id;
bool p[5] = {false};
int nu[5] = {0};
int ma;
} pr[105];
bool cmp(struct St a, struct St b)
{
if(a.ma == b.ma)
return a.id < b.id;
return a.ma > b.ma;
}
void solve()
{
int n, m;
scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++)
{
int x;
scanf("%d%d%d", &pr[i].fs, &x, &pr[i].gs);
for(int j = 0; j < pr[i].gs; j++)
{
char y;
scanf(" %c", &y);
pr[i].p[y - 'a'] = true;
}
pr[i].id = i + 1;
pr[i].ma = 0;
}
while(n--)
{
double re = 0;
for(int i = 0; i < m; i++)
{
char y;
scanf(" %c", &y);
int h;
scanf("%d", &h);
bool fa = true;
bool ss[5] = {false};
for(int j = 0; j < h; j++)
{
scanf(" %c", &y);
if(!pr[i].p[y - 'a'])
fa = false;
ss[y - 'a'] = true;
}
scanf("%c", &y);
if(h != pr[i].gs && fa)
{
re += pr[i].fs * 1.0 / 2;
fa = false;
}
if(!fa)
{
for(int j = 0; j < 5; j++)
if(pr[i].p[j] != ss[j]){
pr[i].nu[j]++;
pr[i].ma = max(pr[i].ma, pr[i].nu[j]);
}
}
else
re += pr[i].fs;
}
printf("%.1f\n", re);
}
sort(pr, pr + m, cmp);
int maa = pr[0].ma;
if(maa == 0)
printf("Too simple\n");
else
{
for(int i = 0; i < m; i++)
{
if(maa != pr[i].ma)
break;
for(int j = 0; j < 5; j++)
{
char x = j + 'a';
if(pr[i].nu[j] == maa)
printf("%d %d-%c\n", maa, pr[i].id, x);
}
}
}
return;
}
int main()
{
solve();
return 0;
}
20分中等题,与1058有点像,增加各个选项错误的次数的数组,数据结构将错误的题目换成错误选项次数最多即可
2018年9月17日 17:19:52