我希望你是我独家记忆

一段永远封存的记忆,随风而去
posts - 263, comments - 31, trackbacks - 0, articles - 3
   :: 首页 :: 新随笔 ::  :: 聚合  :: 管理

PKU——3273——二分答案

Posted on 2008-09-01 00:15 Hero 阅读(403) 评论(0)  编辑 收藏 引用 所属分类: 代码如诗--ACM
 1 //PKU 3273 Accepted 608K 94MS C++ 1044B Monthly Expense
 2 
 3 //二分答案
 4 
 5 #include <stdio.h>
 6 #include <stdlib.h>
 7 #include <string.h>
 8 #include <math.h>
 9 
10 const int INF = 99999999 ;
11 const int size = 100100 ;
12 
13 int data[size] ;
14 int insum ;
15 int inmax ;
16 int inn, inm ;
17 
18 void input()
19 {
20     insum = 0 ; inmax = -1 ;
21     forint i=1; i<=inn; i++ ) 
22     {
23         scanf( "%d"&data[i] ) ; insum += data[i] ;
24         inmax = inmax > data[i] ? inmax : data[i] ;
25     }
26 }
27 
28 int test( int mid )
29 {
30     int cnt = 1 ; int tsum = 0 ;
31     forint i=1; i<=inn; i++ )
32     {
33         if( tsum + data[i] > mid )
34         {
35             cnt++ ; tsum = data[i] ;
36         }
37         else 
38         {
39             tsum += data[i] ;
40         }
41     }
42 
43     return cnt ;
44 }
45 
46 void process()
47 {
48     int left = inmax ; int right = insum ; int mid ;
49 
50     while( left < right )
51     {
52         mid = ( (left+right)/2 ) ;
53 
54         int cnt = test( mid ) ;
55         if( cnt > inm ) left = mid + 1 ;
56         else            right = mid ;
57     }
58 
59     printf( "%d\n", right ) ;
60 }
61 
62 int main()
63 {
64     //freopen( "in.txt", "r", stdin ) ;
65 
66     while( scanf( "%d %d"&inn, &inm ) != EOF )
67     {
68         input() ;
69 
70         process() ;
71 
72         //output() ;
73     }
74 
75     return 0 ;
76 }

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理