HDU 4768 Flyer
2013-09-28 17:40
246 查看
题意:
就是发传单,每个社团有三个参数A B C。社团的传单会发给第A个人 ,第A+1*C个人,第A+2*C...A+K*C (A+K*C<=B)
某个人收到的传单是奇数的话,就称之为不幸之人。至多只有一个人会是不幸之人。
思路:
首先要判是否有解。这个可以统计所有传单数量,如果是奇数那么就有解,反之。
如果有解,因为只有一个人会是奇数,我们可以二分找到这个人,设为其编号为x。假设当前二分编号的位置是p,如果p之前(包含第p个人)所有人收到的传单数量和是偶数,说明x在p后面(奇数+偶数=奇数)。反之,x在p前面。二分停下之后就夹逼出了答案。知道是谁后,求某个人收到的传单数量就很简单了。
code:
就是发传单,每个社团有三个参数A B C。社团的传单会发给第A个人 ,第A+1*C个人,第A+2*C...A+K*C (A+K*C<=B)
某个人收到的传单是奇数的话,就称之为不幸之人。至多只有一个人会是不幸之人。
思路:
首先要判是否有解。这个可以统计所有传单数量,如果是奇数那么就有解,反之。
如果有解,因为只有一个人会是奇数,我们可以二分找到这个人,设为其编号为x。假设当前二分编号的位置是p,如果p之前(包含第p个人)所有人收到的传单数量和是偶数,说明x在p后面(奇数+偶数=奇数)。反之,x在p前面。二分停下之后就夹逼出了答案。知道是谁后,求某个人收到的传单数量就很简单了。
code:
#include <algorithm> #include <iostream> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <string> #include <math.h> #include <vector> #include <queue> #include <stack> #include <cmath> #include <list> #include <set> #include <map> using namespace std; /*-------------------------Template----*/ #define N 20020 #define E 200000 #define ll long long #define CUBE(x) ((x)*(x)*(x)) #define SQ(x) ((x)*(x)) #define ALL(x) x.begin(),x.end() #define CLR(x,a) memset(x,a,sizeof(x)) #define maxAry(a,n) max_element(a,a+(n)) #define minAry(a,n) min_element(a,a+(n)) typedef pair<int,int> PI; const int INF=0x3fffffff; const int PRIME =999983; const int MOD =10007; const int MULTI =1000000007; const double EPS=1e-9; /*----------------------end Template----*/ int n; ll l,r; ll a ,b ,c ,k ; ll get(ll A,ll B,ll C) { ll R=(B-A)/C; l=min(l,A); r=max(r,A+R*C); return R+1; } int getAns(ll x) { int ans=0; for(int i=0;i<n;i++){ ll y=x-a[i]; if(y>=0 && y<=b[i]-a[i] && y%c[i]==0){ ans++; } } return ans; } bool check(ll x) { ll sum=0,p; for(int i=0;i<n;i++){ p=x-a[i]; if(p>=0){ p/=c[i]; sum+=min(p+1,k[i]); } } return sum%2==0; } int main() { ll sum=0; while(~scanf("%d",&n)){ l=1ll<<32; r=-1; sum=0; for(int i=0;i<n;i++){ scanf("%I64d%I64d%I64d",a+i,b+i,c+i); sum+=(k[i]=get(a[i],b[i],c[i])); } if(sum%2){ while(l<r){ ll mid=(l+r)>>1; if(check(mid)) l=mid+1; else r=mid; } printf("%I64d %d\n",r,getAns(r)); }else{ puts("DC Qiang is unhappy."); } } return 0; }
相关文章推荐
- hdu 4768 Flyer 二分
- Hdu 4768 Flyer(2013长春网络赛)
- HDU 4768 Flyer (2013长春网络赛1010题,二分)
- 二分-hdu-4768-Flyer
- HDU 4768Flyer(二分 自己思维太死了)
- 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(等差数列求模和运算)
- hdu 4768 Flyer
- hdu 4768 - Flyer(二分)
- hdu 4768 Flyer 二分
- HDU 4768: Flyer
- HDU 4768 Flyer(二分法)
- HDU 4768 Flyer(二分)