zoukankan      html  css  js  c++  java
  • P1083 借教室

    题目链接https://www.luogu.com.cn/problem/P1083

    一、5分题解:

    1 #include<bits/stdc++.h>
    2 using namespace std;
    3 int main()
    4 {
    5     cout<<0;
    6     return 0;
    7  } 
    View Code

    二、纯模拟(45分)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n, m;
     4 int a[1000005];
     5 int d, s, t;
     6 int f=0, ans;
     7 int main()
     8 {
     9     cin>>n>>m;
    10     for(int i=1; i<=n; i++)
    11         cin>>a[i];
    12     for(int i=1; i<=m; i++){
    13         cin>>d>>s>>t;
    14         for(int j=s; j<=t; j++){
    15             a[j]-=d;
    16             if(a[j]<0){
    17                 f=-1;
    18                 break;
    19             }
    20         }
    21         if(f!=0){
    22             ans=i;
    23             break;
    24         }
    25     }
    26     if(f==0)cout<<0;
    27     else cout<<f<<endl<<ans;
    28     return 0;
    29  } 

    三、前缀和、差分、二分答案(100分)

      思路:从第一份订单开始枚举,直到无法满足或者全枚举完结束

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n, m;
     4 int diff[1000005], a[1000005], d[1000005], s[1000005], t[1000005];
     5 int ans=-1;
     6 int l, r;
     7 bool isok(int mid){
     8     memset(diff, 0, sizeof(diff));
     9     for(int i=1; i<=mid; i++){
    10         diff[s[i]]-=d[i]; 
    11         diff[t[i]+1]+=d[i];
    12     }
    13     int temp=0;
    14     for(int i=1; i<=n; i++){
    15         temp+=diff[i];
    16         if(a[i]+temp<0)return 0;
    17     }
    18     return 1;
    19 }
    20 int main()
    21 {
    22     cin>>n>>m;
    23     for(int i=1; i<=n; i++)cin>>a[i];
    24     for(int i=1; i<=m; i++)cin>>d[i]>>s[i]>>t[i];
    25     l=1; r=m;
    26     while(l<=r){
    27         int mid=(l+r)/2;
    28         if(!isok(mid)){
    29             ans=mid;
    30             r=mid-1;
    31         }
    32         else {
    33             l=mid+1;    
    34         }
    35     }
    36     
    37     if(ans==m || ans==-1)cout<<0;    
    38     else cout<<-1<<endl<<ans;
    39     
    40     return 0;
    41 }
  • 相关阅读:
    Beta 冲刺 (2/7)
    Beta 冲刺 (1/7)
    2017软件工程实践总结
    华为软件开发云评测
    android开发——用户头像
    学生&部门智能匹配程序
    学生会里学生汇
    数独棋盘生成器
    读与思
    Java接口
  • 原文地址:https://www.cnblogs.com/tflsnoi/p/13861793.html
Copyright © 2011-2022 走看看