hdu 4768 Flyer 二分
2013-10-01 16:21
381 查看
思路:由于最多只有一个是奇数,所以二分枚举这个点,每次判断这个点的左边区间段所有点的和作为
二分的依据。
代码如下:
View Code
二分的依据。
代码如下:
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<set> #include<vector> #define ll long long #define M 200005 #define inf 1e20 #define mod 1000000007 using namespace std; struct inter { ll a,b,c; }p[M]; bool cal(int n) { ll ans=0; for(int i=0;i<n;i++) ans+=(p[i].b-p[i].a)/p[i].c+1; return ans&1; } int main() { int i,j,k,m,n,x; ll l,r,mid; while(scanf("%d",&n)!=EOF){ l=inf;r=0; for(i=0;i<n;i++){ scanf("%I64d%I64d%I64d",&p[i].a,&p[i].b,&p[i].c); l=min(l,p[i].a); r=max(r,p[i].b); } if(!cal(n)){ printf("DC Qiang is unhappy.\n"); continue; } while(l<=r){ mid=(l+r)>>1; ll ret=0; for(i=0;i<n;i++){ if(mid<p[i].a) continue; ll rr=min(mid,p[i].b); ret+=(rr-p[i].a)/p[i].c+1; } if(ret&1) m=mid,r=mid-1; else l=mid+1; } int ans=0; for(i=0;i<n;i++) if(m>=p[i].a&&m<=p[i].b&&(m-p[i].a)%p[i].c==0) ans++; printf("%d %d\n",m,ans); } return 0; }
View Code
相关文章推荐
- HDU 4768 Flyer 二分
- HDU 4768 Flyer (二分)
- hdu 4768 Flyer 二分
- hdu 4768 Flyer 二分(2013 ACM/ICPC Asia Regional Changchun Online 1010)
- HDU 4768 Flyer (二分、位运算)
- HDU 4768 Flyer(二分)
- HDU 4768 Flyer(二分)
- hdu 4768 Flyer (二分)
- 二分-hdu-4768-Flyer
- HDU 4768 Flyer (2013长春网络赛1010题,二分)
- hdu 4768 Flyer(二分)
- 二分-hdu-4768-Flyer
- hdu 4768 Flyer【二分】
- hdu 4768 Flyer 长春网络赛 1010 二分
- HDU 4768 Flyer(13年长春网络赛-J题-二分)
- HDU 4768 Flyer(13年长春网络赛-J题-二分)
- hdu 4768 Flyer(二分查找)
- hdu 4768 - Flyer(二分)
- HDU 4768 Flyer(二分)
- HDU 4768 Flyer(二分)