HDU 4768 二分

来源:互联网 发布:电子烟入门 知乎 编辑:程序博客网 时间:2024/06/05 05:06

因为奇数最多只存在一个

二分查到即可


#include "stdio.h"#include "string.h"#include "math.h"#include "stdlib.h"__int64  a[20010][4];int main(){__int64 n,i,max,min,ans1,ans2,mid,sum,count;while (scanf("%I64d",&n)!=EOF){max=0;min=0x7fffffffffffffff;sum=0;for (i=1;i<=n;i++){scanf("%I64d%I64d%I64d",&a[i][0],&a[i][1],&a[i][2]);if (a[i][0]<min) min=a[i][0];sum+=(a[i][1]-a[i][0])/a[i][2]+1;if (a[i][1]>max) max=a[i][1];}if (sum%2==0)printf("DC Qiang is unhappy.\n");else {while (min<=max){ans2=0;mid=(min+max)/2;sum=0;for (i=1;i<=n;i++)if (a[i][0]<=mid){if (a[i][1]>=mid) count=(mid-a[i][0])/a[i][2];else count=(a[i][1]-a[i][0])/a[i][2];sum+=count+1;count=count*a[i][2]+a[i][0];if (count==mid) ans2++;ans1=mid;}if (ans2%2==1)break;if (sum%2==1)max=mid-1;else min=mid+1;}printf("%I64d %I64d\n",ans1,ans2);}}return 0;}