problemscpp
A collection of my answers to algorithm problems in c++.
| 函数
pat::b::b1073 命名空间参考

1073 多选题常见计分法 更多...

struct  problem
 多选题 更多...
 

函数

int main (istream &cin, ostream &cout)
 
 TEST (b1073, case1)
 
 TEST (b1073, case2)
 

详细描述

1073 多选题常见计分法

函数说明

◆ main()

int pat::b::b1073::main ( istream &  cin,
ostream &  cout 
)

在文件 pat.cpp2516 行定义.

2516 {
2517 int n;
2518 int m;
2519 cin >> n >> m;
2520 vector<problem> problems(m);
2521 map<pair<int, char>, int> noe;
2522 int max_cnt = 0;
2523 for(int i = 0; i < m; i++) {
2524 problem p;
2525 p.id = i + 1;
2526 cin >> p.score >> p.noa >> p.noca;
2527 p.ca = unordered_set<char>();
2528 for(int j = 0; j < p.noca; j++) {
2529 char ca;
2530 cin >> ca;
2531 p.ca.insert(ca);
2532 }
2533 problems[i] = p;
2534 }
2535 char ch;
2536 for(int i = 0; i < n; i++) {
2537 double score = 0;
2538 for(int j = 0; j < m; j++) {
2539 unordered_set<char> as;
2540 cin >> ch;
2541 int noa;
2542 cin >> noa;
2543 bool flag = true;
2544 for(int k = 0; k < noa; k++) {
2545 char a;
2546 cin >> a;
2547 as.insert(a);
2548 if(!problems[j].ca.contains(a)) {
2549 noe[make_pair(problems[j].id, a)]++;
2550 max_cnt = max(max_cnt, noe[make_pair(problems[j].id, a)]);
2551 flag = false;
2552 }
2553 }
2554 cin >> ch;
2555 for(auto a: problems[j].ca) {
2556 if(!as.contains(a)) {
2557 noe[make_pair(problems[j].id, a)]++;
2558 max_cnt = max(max_cnt, noe[make_pair(problems[j].id, a)]);
2559 }
2560 }
2561 if(!flag) {
2562 continue;
2563 }
2564 if(noa == problems[j].noca) {
2565 score += problems[j].score;
2566 } else {
2567 score += static_cast<double>(problems[j].score) / 2;
2568 }
2569 }
2570 cout << fixed << setprecision(1) << score << endl;
2571 }
2572 if(noe.empty()) {
2573 cout << "Too simple";
2574 } else {
2575 for(const auto &[k, cnt]: noe) {
2576 if(cnt == max_cnt) {
2577 const auto &[id, a] = k;
2578 cout << cnt << ' ' << id << '-' << a << endl;
2579 }
2580 }
2581 }
2582 return 0;
2583 }
多选题
Definition: pat.h:440
int score
满分值
Definition: pat.h:442
unordered_set< char > ca
正确选项
Definition: pat.h:445
int id
编号
Definition: pat.h:441
int noa
选项个数
Definition: pat.h:443
int noca
正确选项个数
Definition: pat.h:444

引用了 pat::b::b1073::problem::ca, pat::b::b1073::problem::id, pat::b::b1073::problem::noa, pat::b::b1073::problem::noca , 以及 pat::b::b1073::problem::score.

被这些函数引用 TEST().

◆ TEST() [1/2]

pat::b::b1073::TEST ( b1073  ,
case1   
)

在文件 pat_test.cpp1192 行定义.

1192 {
1193 istringstream in("3 4 \n"
1194 "3 4 2 a c\n"
1195 "2 5 1 b\n"
1196 "5 3 2 b c\n"
1197 "1 5 4 a b d e\n"
1198 "(2 a c) (3 b d e) (2 a c) (3 a b e)\n"
1199 "(2 a c) (1 b) (2 a b) (4 a b d e)\n"
1200 "(2 b d) (1 e) (1 c) (4 a b c d)");
1201 auto out = ostringstream();
1202 main(in, out);
1203 const auto ans = out.str();
1204 ASSERT_EQ("3.5\n"
1205 "6.0\n"
1206 "2.5\n"
1207 "2 2-e\n"
1208 "2 3-a\n"
1209 "2 3-b\n",
1210 out.str());
1211 }
int main(int argc, char **argv)
Definition: main.cpp:5

引用了 main().

◆ TEST() [2/2]

pat::b::b1073::TEST ( b1073  ,
case2   
)

在文件 pat_test.cpp1213 行定义.

1213 {
1214 istringstream in("2 2 \n"
1215 "3 4 2 a c\n"
1216 "2 5 1 b\n"
1217 "(2 a c) (1 b)\n"
1218 "(2 a c) (1 b)");
1219 auto out = ostringstream();
1220 main(in, out);
1221 const auto ans = out.str();
1222 ASSERT_EQ("5.0\n"
1223 "5.0\n"
1224 "Too simple",
1225 out.str());
1226 }

引用了 main().