ccf-2020-12 真题 + 题解 + 解析总结
1. 期末预测之安全指数
题目:
解题思路 + 总结:
代码:
#include <iostream>
using namespace std;
int main()
{
int n = 0, w = 0, score = 0, sum = 0; //sum一定要记得初始化啊
scanf("%d", &n);
while(n --)
{
scanf("%d%d", &w, &score);
sum += (w * score);
}
if(sum <= 0) printf("0");
else
printf("%d", sum);
return 0;
}
2. 期末预测之最佳阈值
题目:
解题思路 + 总结:
代码:
#include <iostream>
#include <vector>
#include <algorithm> //sort 的头文件
using namespace std;
const int N = 100010;
typedef pair <int, int> PII;
vector <PII> a; //存放原有数据
int sum = 0; //当前答案值
int maxsum = 0; //记录最大值,判断答案是否改变
int res = 0; //记录最值点下标
vector <PII> stk;
int main()
{
int m;
scanf("%d", &m);
for(int i = 0; i < m; i ++)
{
int y, r;
scanf("%d%d", &y, &r);
if(r) sum ++; //记录第一个数据的答案
a.push_back({y,r});
}
sort(a.begin(), a.end());
stk.push_back(a[0]);
for(int i = 1; i < m; i ++) //栈中始终存放的是i的前一个数值的数
{
auto temp = stk.back();
while(temp.first == a[i].first && i < m) //如果序列中后续元素与栈顶元素分数相同,不停进栈
{
stk.push_back(a[i ++]);
}
while(stk.size())
{
temp = stk.back(), stk.pop_back();
if(temp.second) sum --; //为1减减
else sum ++;
}
if(sum >= maxsum) //当sum不变或者变大,都更新i的值
{
res = min(i, m - 1); //排除i此时以越界
maxsum = sum;
}
if(i < m) stk.push_back(a[i]); //此时栈是空的,把下一个数放进去
}
printf("%d", a[res].first);
return 0;
}
没考过ccf的小白刷前两题 备考 ,后续的题会慢慢补上,请见谅~