码迷,mamicode.com
首页 > 其他好文 > 详细

Flyer

时间:2014-08-26 11:05:45      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   ar   art   

hdu4768:http://acm.hdu.edu.cn/showproblem.php?pid=4768

题意:给你1--2^32个位置,然后有m个操作,每次操作给你3个数 a,b,c,然后在a,a+c,a+2*c......a+k*c的位置加一,其中a+k*c<=b,a+(k+1)*c>b,要你找出最后的结果是奇数的位置和这个数。

题解:由于这一题,题目保证最多只有一个奇数,所以可以想到用二分。具体的方法可以直接看代码。

bubuko.com,布布扣
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int N=30003;
 7 long long a[N],b[N],c[N];
 8 int n;
 9 long long getsum(long long mid){
10     long long as=0,tmp=mid;
11     for(int i=1;i<=n;i++){
12         tmp=min(mid,b[i]);
13         if(tmp>=a[i])
14         as+=(tmp-a[i])/c[i]+1;
15     }
16    return as;
17 }
18 bool judge(long long mid){
19      long long temp=getsum(mid);
20      if(temp&1)return true;
21        return false;
22 }
23 int main(){
24   while(~scanf("%d",&n)){
25     memset(a,0,sizeof(a));
26     memset(b,0,sizeof(b));
27     memset(c,0,sizeof(c));
28     for(int i=1;i<=n;i++){
29         scanf("%I64d%I64d%I64d",&a[i],&b[i],&c[i]);
30     }
31     long long l=1,r=1e10,ans=0;
32     while(l<r){
33         long long mid=(l+r)/2;
34         if(judge(mid)){
35             r=mid;
36             ans=mid;
37         }
38         else{
39             l=mid+1;
40         }
41     }
42     if(ans==0)
43         printf("DC Qiang is unhappy.\n");
44     else{
45       long long num=getsum(ans)-getsum(ans-1);
46     printf("%I64d %I64d\n",ans,num);
47     }
48   }
49 }
View Code

 

Flyer

标签:style   blog   http   color   os   io   for   ar   art   

原文地址:http://www.cnblogs.com/chujian123/p/3936562.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!