• 蓝桥杯刷题(二分)


    前言:

      最近学校的学业有点重,好多课的作业一下布置导致我时间紧张,今天好不容易找到了整块的时间来刷刷题,不过有几道题难度对我来说有一点大了,所以到现在为止也没做几道,希望自己在后面能更勤奋一点吧。

    正文:

    1、分巧克力:

      

    1. #include
    2. using namespace std;
    3. const int N=1e5+9;
    4. int n,k,h[N],w[N],ans;
    5. bool check(int x){
    6. int num=0;
    7. for(int i=1;i<=n;i++){
    8. num+=(h[i]/x)*(w[i]/x);
    9. if(num>=k)return 1;
    10. }
    11. return 0;
    12. }
    13. int main(){
    14. cin>>n>>k;
    15. for(int i=1;i<=n;i++)cin>>h[i]>>w[i];
    16. long long l=1,r=1e5,mid;
    17. while(l
    18. mid=(l+r+1)/2;
    19. if(check(mid))l=mid;
    20. else r=mid-1;
    21. }
    22. cout<
    23. return 0;
    24. }

    2、管道:

    1. #include
    2. #define x first
    3. #define y second
    4. using namespace std;
    5. const int N=1e5+10;
    6. typedef long long ll;
    7. int n,m;
    8. pair<int,int>w[N],q[N];
    9. bool check(int mid){
    10. int cnt=0;
    11. for(int i=1;i<=n;i++){
    12. int L=w[i].x,S=w[i].y;
    13. if(mid>=S){
    14. int t=mid-S;
    15. int l=max(1,L-t),r=min((ll)m,(ll)L+t);
    16. q[cnt++]={l,r};
    17. }
    18. }
    19. sort(q,q+cnt);
    20. int st = -1, ed = -1;
    21. for(int i=0;i
    22. if (q[i].x <= ed + 1) ed = max(ed, q[i].y);
    23. else st = q[i].x, ed = q[i].y;
    24. }
    25. return st==1&ed==m;
    26. }
    27. int main(){
    28. cin>>n>>m;
    29. for(int i=1;i<=n;i++){
    30. cin>>w[i].x>>w[i].y;
    31. }
    32. ll l=0,r=2e9;
    33. while(l
    34. ll mid=l+r>>1;
    35. if(check(mid))r=mid;
    36. else l=mid+1;
    37. }
    38. cout<
    39. return 0;
    40. }

    3、技能升级:

    1. #include
    2. using namespace std;
    3. typedef long long LL;
    4. const int N = 100010;
    5. int n, m;
    6. int a[N], b[N];
    7. bool check(int mid)
    8. {
    9. LL res = 0;
    10. for (int i = 0; i < n; i ++ )
    11. if (a[i] >= mid)
    12. res += (a[i] - mid) / b[i] + 1;
    13. return res >= m;
    14. }
    15. int main()
    16. {
    17. scanf("%d%d", &n, &m);
    18. for (int i = 0; i < n; i ++ ) scanf("%d%d", &a[i], &b[i]);
    19. int l = 0, r = 1e6;
    20. while (l < r)
    21. {
    22. int mid = l + r + 1 >> 1;
    23. if (check(mid)) l = mid;
    24. else r = mid - 1;
    25. }
    26. LL res = 0, cnt = 0;
    27. for (int i = 0; i < n; i ++ )
    28. if (a[i] >= r)
    29. {
    30. int c = (a[i] - r) / b[i] + 1;
    31. int end = a[i] - (c - 1) * b[i];
    32. cnt += c;
    33. res += (LL)(a[i] + end) * c / 2;
    34. }
    35. printf("%lld\n", res - (cnt - m) * r);
    36. return 0;
    37. }

    后记:

      之后要开会,不知道大学怎么这么多破事。

  • 相关阅读:
    搭建 GPT-2 模型训练环境
    Java监听器知识点总结-DX的笔记
    03_SpringBoot项目配置
    【LLM】基于LLM的agent应用(上)
    MATLAB 产生式系统 · 推断原神角色
    ch4-2 音频信号的时域特征
    Exploration by random network distillation论文笔记
    数据结构与算法-(7)---栈的应用-(4)后缀表达式求值
    论文阅读:2015ResNet深度残差网络(待补充)
    Electron入门知识
  • 原文地址:https://blog.csdn.net/Wzh20060111/article/details/136687772