• 2023 山东省赛 【9.28训练补题】


    Dashboard - The 13th Shandong ICPC Provincial Collegiate Programming Contest - Codeforces

    A.Orders

    题解:

    排序+遍历

    代码:

    1. #include
    2. using namespace std;
    3. const int N=1e5+5;
    4. typedef long long ll;
    5. typedef unsigned long long ull;
    6. typedef pair pi;
    7. const ll mod=100000007;
    8. vectora;
    9. int T,n,k;
    10. ll x,y;
    11. ll sum,res;
    12. int tmp;
    13. int main(){
    14. scanf("%d",&T);
    15. while(T--){
    16. a.clear();
    17. scanf("%d%d",&n,&k);
    18. for(int i=1;i<=n;i++){
    19. scanf("%lld%lld",&x,&y);
    20. a.push_back({x,y});
    21. }sort(a.begin(),a.end());
    22. res=k;
    23. int cnt=1,f=1;
    24. for(int i=0;i
    25. res-=a[i].second;
    26. if(a[i].first>cnt){
    27. res+=(a[i].first-cnt)*k;
    28. cnt=a[i].first;
    29. }//printf("i%d a[i]%d cnt%d res%lld\n",i,a[i].second,cnt,res);
    30. if(res<0){
    31. f=0;break;
    32. }
    33. }if(f)printf("Yes\n");
    34. else printf("No\n");
    35. }
    36. return 0;
    37. }

    D. Fast and Fat(二分+贪心)

    题解:

    weight为第一关键字,speed为第二关键字排序,二分最大值,check函数判断可否满足最大值为x,遍历所有人,将速度>=x分为c组,

    *二分起点 l,r 为初始最大最小值

    *结束条件为 l<=r

    *反向迭代器删除元素(++itc).base() 反向迭代器删除元素-CSDN博客

    *看c组能否带着b组时从体重从大到小看

    代码:

    1. #include
    2. using namespace std;
    3. const int N=1e5+5;
    4. typedef long long ll;
    5. typedef unsigned long long ull;
    6. typedef pair<int,int> pi;
    7. const int inf=1<<30;
    8. const ll mod=100000007;
    9. vectora,c;
    10. vector<int>b;
    11. int T,n,k;
    12. int v,w;
    13. int mx,mn;
    14. int chk(int x){//最大值为x是否可行
    15. //printf("x%d\n",x);
    16. b.clear();c.clear();
    17. for(int i=0;i
    18. //printf("a[i].s:%d\n",a[i].second);
    19. if(a[i].secondpush_back(a[i].first);
    20. else c.push_back(a[i]);
    21. }int lb=b.size(),lc=c.size();
    22. if(lb>lc)return 0;
    23. //printf("lb%d lc%d\n",lb,lc);
    24. auto itb=b.rbegin();
    25. for(;itb!=b.rend();itb++){
    26. //printf("b:%d\n",*itb);
    27. int flag=0;
    28. for(auto itc=c.rbegin();itc!=c.rend();itc++){
    29. //printf("cw:%d cs:%d %d\n",itc->first,itc->second,itc->second+itc->first-*itb);
    30. if((itc->second+itc->first-*itb)>=x){
    31. c.erase((++itc).base());
    32. flag=1;
    33. break;
    34. }
    35. }if(flag==0)return 0;
    36. }return 1;
    37. }
    38. int main(){
    39. scanf("%d",&T);
    40. while(T--){
    41. mx=0,mn=inf;
    42. a.clear();
    43. scanf("%d",&n);
    44. for(int i=1;i<=n;i++){
    45. scanf("%d%d",&v,&w);
    46. a.push_back({w,v});
    47. mx=max(mx,v);
    48. mn=min(mn,v);
    49. }sort(a.begin(),a.end());//按weight,speed升序排序
    50. int l=mn,r=mx,res=mn;
    51. while(l<=r){
    52. int mid=(l+r)/2;
    53. if(chk(mid))l=mid+1,res=mid;
    54. else r=mid-1;
    55. }printf("%d\n",res);
    56. }
    57. return 0;
    58. }

    G. Matching 

    *等式变换

    *求取最大值时考虑负数

    *考虑是否有孤立点 

    1. #include
    2. using namespace std;
    3. const int N=1e5+5;
    4. typedef long long ll;
    5. typedef unsigned long long ull;
    6. typedef pair<int,int> pi;
    7. const int inf=1<<30;
    8. const ll mod=1e9+7;
    9. int T,n,x;
    10. ll res;
    11. /*
    12. ai-i=aj-j
    13. >
    14. */
    15. unordered_map<int,vector<int>>mp;
    16. int main(){
    17. scanf("%d",&T);
    18. while(T--){
    19. res=0;
    20. scanf("%d",&n);
    21. mp.clear();
    22. for(int i=1;i<=n;i++){
    23. scanf("%d",&x);
    24. mp[x-i].push_back(x);
    25. }for(auto i:mp){
    26. vector<int>a=i.second;
    27. sort(a.begin(),a.end());
    28. for(int j=a.size()-1;j>=1;j-=2){
    29. if((a[j]+a[j-1])>0)res+=a[j]+a[j-1];
    30. else break;
    31. }
    32. }printf("%lld\n",res);
    33. }
    34. return 0;
    35. }

    I.Three Dices

    1. #include
    2. using namespace std;
    3. const int N=1e5+5;
    4. typedef long long ll;
    5. typedef unsigned long long ull;
    6. typedef pair<int,int> pi;
    7. const int inf=1<<30;
    8. const ll mod=100000007;
    9. int a,b;
    10. int chk(int a,int b){
    11. if(a>12||b>18)return 0;
    12. /*
    13. 4+4+4=12
    14. 4+4+1=9
    15. 4+1+1=6
    16. 1+1+1=3
    17. 4+4=8
    18. 4+1=5
    19. 1+1=2
    20. 4
    21. 1
    22. */
    23. if(a!=0&&a%3==0&&b==0)return 1;
    24. if((a==8||a==5||a==2)&&(b==2||b==3||b==5||b==6))return 1;
    25. /*
    26. 6+6=12
    27. 6+5=11
    28. 6+3=9
    29. 6+2=8
    30. 5+5=10
    31. 5+3=8
    32. 5+2=7
    33. 3+3=6
    34. 3+2=5
    35. 2+2=4
    36. 4<=b<=12
    37. */
    38. if(a==4&&(4<=b&&b<=12))return 1;
    39. if(a==1&&(4<=b&&b<=12))return 1;
    40. /*
    41. 6+6+6=18
    42. 6+6+5=17
    43. 6+6+3=15
    44. 6+6+2=14
    45. 6+5+5=16
    46. 6+5+3=14
    47. 6+5+2=13
    48. 6+3+3=12
    49. 6+3+2=11
    50. 6+2+2=10
    51. 5+5+5=15
    52. 5+5+3=13
    53. 5+5+2=12
    54. 5+3+3=11
    55. 5+3+2=10
    56. 5+2+2=9
    57. 3+3+3=9
    58. 3+3+2=8
    59. 3+2+2=7
    60. 2+2+2=6
    61. 6<=b<=18
    62. */
    63. if(a==0&&(6<=b&&b<=18))return 1;
    64. return 0;
    65. }
    66. int main(){
    67. scanf("%d%d",&a,&b);
    68. if(chk(a,b))printf("Yes");
    69. else printf("No");
    70. return 0;
    71. }

  • 相关阅读:
    LinkHashSet、Treeset的Comparable接口自然排序和Comparator比较器排序使用
    lintcode 581 · 最长重复子序列【中等 vip 动态规划 /递归】
    【Redis学习笔记】第三章 Redis通用指令
    NSTimer 滑动导致失效
    v-model与:model
    <C++>初识多态,剖析virtual关键字
    GEE:矢量数据与栅格数据的面积计算
    女生神经末梢最多的部位,女性身上哪里神经最多
    数据结构:二叉排序树
    不想花大价钱?这10款替代Axure的平替软件更划算!
  • 原文地址:https://blog.csdn.net/m0_63851154/article/details/133419499