• CF750C (1600)


    https://codeforces.com/problemset/problem/750/C

    题目大意

    Limak 一共参加了n 场codeforces比赛,按时间给出参赛记录,每条记录包括ci​ ,di​ 。

    ci​ 表示在第 i 场rating的变化,di​ 有两个可能值:1表示rating≥1900 ;2表示rating<1900 。

    问n 场之后rating的最大值为多少?

     1. 贪心思路

    拿第一个样例,假设一开始分数为0,分数线为x(即当分数线为1900时原始分数为1900-x),则0>=x,-7Infinity”,否则x取下界值。最后将分数线移回1900即可。

     代码: 

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. #define pi acos(-1.0)
    6. #define endl '\n'
    7. const int inf = 0x3f3f3f3f;
    8. void solve()
    9. {
    10. int n, down = inf, up = -inf, res = 0; // 下界,上界,变化值
    11. cin >> n;
    12. for(int i = 0; i < n; i ++)
    13. {
    14. int a,b;
    15. cin >> a >> b;
    16. if(b == 1) down = min(down, res);
    17. else up = max(up, res);
    18. res += a;
    19. }
    20. if(up == -inf) cout << "Infinity" << endl;
    21. else
    22. {
    23. if(down <= up) cout << "Impossible" << endl;
    24. else
    25. {
    26. res -= up; // 取下界
    27. res += 1899; // 将分数移回1900
    28. cout << res << endl;
    29. }
    30. }
    31. }
    32. int main()
    33. {
    34. ios::sync_with_stdio(false);
    35. cin.tie(nullptr);
    36. cout.tie(0);
    37. int T = 1;
    38. //cin >> T;
    39. while(T --)
    40. {
    41. solve();
    42. }
    43. return 0;
    44. }

    2. 二分思路

     直接二分答案,check判断:

    1:是否为合法解

    2:枚举答案是否需要调大 / 调小

    二分上下界为 [ - inf, + inf ] , 注意特判无解和无穷的情况。

     代码:

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. #define endl '\n'
    6. #define x first
    7. #define y second
    8. typedef long long LL;
    9. typedef pair PII;;
    10. const int inf = 1e9;
    11. const int N = 2e5 + 10, mod = 1e9 + 7;
    12. PII a[N];
    13. int n;
    14. int check(int mid)
    15. {
    16. for(int i = 1; i <= n; i ++)
    17. {
    18. if(a[i].y == 1 && mid < 1900) return 1; // 小了,要调大
    19. if(a[i].y == 2 && mid >= 1900) return 0; // 大了,要调小
    20. mid += a[i].x; // 暂时符合,加上
    21. }
    22. return 2; // 符合
    23. }
    24. void solve()
    25. {
    26. int num = -inf;
    27. cin >> n;
    28. for(int i = 1; i <= n; i ++) cin >> a[i].x >> a[i].y;
    29. int l = -inf,r = inf;
    30. while(l <= r)
    31. {
    32. int mid = (l + r) / 2;
    33. int tt = check(mid);
    34. if(tt == 2) num = max(num, mid), l = mid + 1; // 符合取最大
    35. else if(tt == 1) l = mid + 1; // 小了,区间调大
    36. else r = mid - 1; // 大了,区间调小
    37. }
    38. if(num == -inf) cout << "Impossible" << endl;
    39. else if(num == inf) cout << "Infinity" << endl;
    40. else
    41. {
    42. for(int i = 1; i <= n; i ++) num += a[i].x;
    43. cout << num << endl;
    44. }
    45. }
    46. int main()
    47. {
    48. ios::sync_with_stdio(false);
    49. cin.tie(nullptr);
    50. cout.tie(0);
    51. int T = 1;
    52. //cin >> T;
    53. while(T --)
    54. {
    55. solve();
    56. }
    57. return 0;
    58. }

    3. 暴力模拟

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. const int inf = 1e9;
    6. int n;
    7. void solve()
    8. {
    9. int ma = inf, mi = -inf, c,d;
    10. cin >> n;
    11. for(int i = 1; i <= n; i ++)
    12. {
    13. cin >> c >> d;
    14. if(( d == 1 && ma < 1900) || (d == 2 && mi > 1899))
    15. {
    16. cout << "Impossible" << endl; return;
    17. }
    18. if(d == 1 && mi < 1900) mi = 1900; // 要是最小值不确定或超过可参加的界限
    19. if(d == 2 && ma > 1899) ma = 1899; // 要是最大值还不确定或超过可参加的界限
    20. if(mi != -inf) mi += c;
    21. if(ma != inf) ma += c;
    22. }
    23. if(ma == inf) cout << "Infinity" << endl;
    24. else cout << ma << endl;
    25. }
    26. int main()
    27. {
    28. ios::sync_with_stdio(false);
    29. cin.tie(nullptr);
    30. cout.tie(0);
    31. int T = 1;
    32. //cin >> T;
    33. while(T --)
    34. {
    35. solve();
    36. }
    37. return 0;
    38. }

  • 相关阅读:
    大数据下一代变革之必研究数据湖技术Hudi原理实战双管齐下-后续
    09数据结构与算法刷题之【位运算】篇
    辽宁CA与契约锁达成合作,携手推动辽宁省电子劳动合同订立及备案
    基于Java springMVC+MySQL的大学校园BBS论坛网站设计与实现
    Allegro如何设置丝印位号优先显示操作指导
    【10天Unity入门计划】界面介绍(1)-Scene视图
    node写接口之文章的查询接口
    vue下载excel以及自适应表格宽度
    GC8837国产驱动芯片,可以替代TI的DRV8837C,具有 PWM(IN/IN)输入接口, 与行业标准器件兼容,并具有过温保护功能。
    Android一个简单带动画的展开收起功能
  • 原文地址:https://blog.csdn.net/qq_62783783/article/details/128006212