赞
踩
#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; }
#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的小白刷前两题 备考 ,后续的题会慢慢补上,请见谅~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。