程序功能:根据输入的数据,计算出满足一定条件的排名和分数的数量。

设计思路及结构说明:

  1. 首先,定义了一个'pair<int, int>'的vector数组'vpii',用来存储排名和分数的对。
  2. 然后,定义了一个'bool'类型的数组'vis',用来标记已经被访问过的排名。
  3. 接着,定义了一个'bool'类型的数组'check',用来标记已经满足条件的排名。
  4. 在'solve'函数中,首先输入'n'、'k'和's'的值,分别表示排名和分数的数量以及分数的阈值。
  5. 接着,通过循环输入每个排名和分数的值,并将排名大于等于175的数据存储到'vpii[0]'中。
  6. 将'vpii[0]'按照排名进行升序排序。
  7. 定义变量'ans'用来记录满足条件的排名和分数的数量,'dex'用来记录循环的次数,'len'用来记录当前'vpii[dex & 1]'的长度。
  8. 在每次循环中,首先将'vis'数组置为false。
  9. 然后,遍历'vpii[dex & 1]',对于每个排名和分数的对,如果该排名没有被访问过,则将其标记为已访问,将'check'数组对应位置置为true,并将'ans'加1。
  10. 如果该排名已经被访问过,但是分数大于等于阈值's',则将'check'数组对应位置置为true,并将'ans'加1。
  11. 如果该排名已经被访问过,且分数小于阈值's',则将该排名和分数的对存储到'vpii[!(dex & 1)]'中,即存储到下一次循环的'vpii'中。
  12. 清空当前'vpii[dex & 1]',即删除已经访问过的排名和分数的对。
  13. 'dex'加1,用来记录下一次循环。
  14. 最后,输出'ans'的值,即满足条件的排名和分数的数量。

#include #include #include #include #include #define endl '\n' #define ios ios::sync_with_stdio(false) #define tie cin.tie(nullptr),cout.tie(nullptr) using namespace std; using pii = pair<int, int>; const int maxn = 1e5 + 5; vector vpii[2]; bool vis[300]; bool check[maxn]; void solve() { int n, k, s; scanf("%d%d%d", &n, &k, &s); for (int i = 0, rank, pta; i < n; i++) { scanf("%d%d", &rank, &pta); if (rank >= 175)vpii[0].push_back({rank,pta}); } sort(vpii[0].begin(), vpii[0].end()); int ans = 0, dex = 0, len; while (k--) { memset(vis, false, sizeof vis); len = vpii[dex & 1].size(); for (int i = 0; i < len; i++) { if (!vis[vpii[dex & 1][i].first]) { vis[vpii[dex & 1][i].first] = true; check[i] = true; ++ans; } else if (vpii[dex & 1][i].second >= s) { check[i] = true; ++ans; } else { vpii[!(dex & 1)].push_back(vpii[dex & 1][i]); } } vpii[dex & 1].clear(); ++dex; } cout << ans << endl; } int main() { ios, tie; solve(); return 0; }

C++程序:计算满足条件的排名和分数数量

原文地址: https://www.cveoy.top/t/topic/qaAA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录