zoukankan      html  css  js  c++  java
  • URAL-1998 The old Padawan 二分

      题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1998

      题意:有n个石头,每个石头有个重量,每个时间点你能让一个石头飞起来,但有m个时间点,你会分心,使得已经飞起来的石头会有重量之和大于k的石头掉下来,问你最终使的所有石头飞起来的时间。

      维护一个前缀和,然后二分就可以了。

      1 //STATUS:C++_AC_93MS_1113KB
      2 #include <functional>
      3 #include <algorithm>
      4 #include <iostream>
      5 //#include <ext/rope>
      6 #include <fstream>
      7 #include <sstream>
      8 #include <iomanip>
      9 #include <numeric>
     10 #include <cstring>
     11 #include <cassert>
     12 #include <cstdio>
     13 #include <string>
     14 #include <vector>
     15 #include <bitset>
     16 #include <queue>
     17 #include <stack>
     18 #include <cmath>
     19 #include <ctime>
     20 #include <list>
     21 #include <set>
     22 #include <map>
     23 using namespace std;
     24 //#pragma comment(linker,"/STACK:102400000,102400000")
     25 //using namespace __gnu_cxx;
     26 //define
     27 #define pii pair<int,int>
     28 #define mem(a,b) memset(a,b,sizeof(a))
     29 #define lson l,mid,rt<<1
     30 #define rson mid+1,r,rt<<1|1
     31 #define PI acos(-1.0)
     32 //typedef
     33 typedef __int64 LL;
     34 typedef unsigned __int64 ULL;
     35 //const
     36 const int N=100010;
     37 const int INF=0x3f3f3f3f;
     38 const int MOD=95041567,STA=8000010;
     39 const LL LNF=1LL<<60;
     40 const double EPS=1e-8;
     41 const double OO=1e15;
     42 const int dx[4]={-1,0,1,0};
     43 const int dy[4]={0,1,0,-1};
     44 const int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
     45 //Daily Use ...
     46 inline int sign(double x){return (x>EPS)-(x<-EPS);}
     47 template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
     48 template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
     49 template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
     50 template<class T> inline T Min(T a,T b){return a<b?a:b;}
     51 template<class T> inline T Max(T a,T b){return a>b?a:b;}
     52 template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
     53 template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
     54 template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
     55 template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
     56 //End
     57 
     58 int t[N],sum[N];
     59 int n,m,k;
     60 
     61 int binary(int l,int r,LL tar)
     62 {
     63     int mid;
     64     while(l<r){
     65         mid=(l+r)>>1;
     66         if(sum[mid]<tar)l=mid+1;
     67         else r=mid;
     68     }
     69     return l;
     70 }
     71 
     72 int main()
     73 {
     74  //   freopen("in.txt","r",stdin);
     75     int i,j,a,w,ans;
     76     while(~scanf("%d%d%d",&n,&m,&k))
     77     {
     78         for(i=1;i<=n;i++){
     79             scanf("%d",&a);
     80             sum[i]=sum[i-1]+a;
     81         }
     82         for(i=1;i<=m;i++)
     83             scanf("%d",&t[i]);
     84         w=ans=0;
     85         for(i=1;i<=m;i++){
     86             w+=t[i]-t[i-1]-1;
     87             if(w>=n){
     88                 ans+=n-(w-(t[i]-t[i-1]-1));
     89                 break;
     90             }
     91             ans=t[i];
     92             w=binary(1,w+1,sum[w]-k)-1;
     93         }
     94         if(w<n){
     95             ans+=n-w;
     96         }
     97 
     98         printf("%d
    ",ans);
     99     }
    100     return 0;
    101 }
  • 相关阅读:
    JAVA基础——编程练习(二)
    JAVA基础——面向对象三大特性:封装、继承、多态
    JVM内存
    50. Pow(x, n) (JAVA)
    47. Permutations II (JAVA)
    46. Permutations (JAVA)
    45. Jump Game II (JAVA)
    43. Multiply Strings (JAVA)
    42. Trapping Rain Water (JAVA)
    41. First Missing Positive (JAVA)
  • 原文地址:https://www.cnblogs.com/zhsl/p/3398326.html
Copyright © 2011-2022 走看看