题意:

有N个社团,每个社团三个属性A,B,C,表示会向编号A+k*C的同学发传单(k=0,1,2...  && A+k*C <= B)。题目保证最多有一个人收到的传单数是奇数。求如果有人收到传单是奇数,输出编号和他收到的传单数。

思路:

观察最后情况,可以发现,要么每个人都是偶数。要么有一个是奇数。观察其前缀和,发现奇数那个人之前的前缀和都是偶数,之后都是奇数。所以,二分之。

代码:

(上交大牛代码……)

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cmath>
#include <iostream>
#include <algorithm> using namespace std; int n, a[][];
long long sum; bool check(int now){
long long sum = ;
for (int i = ; i <= n; i++)
if (now >= a[i][])
{
int Right = min(a[i][], now);
if (a[i][]) sum += (long long)(Right - a[i][]) / a[i][] + ;
else sum++;
}
return(sum & );
} int read(){
char ch;
for (ch = getchar(); ch < '' || ch > ''; ch = getchar());
int cnt = ;
for (; ch >= '' && ch <= ''; ch = getchar()) cnt = cnt * + ch - '';
return(cnt);
} int main(){
//freopen("j.in", "r", stdin);
//freopen("j.out", "w", stdout);
for (;;)
{
if (scanf("%d", &n) != ) return ;
sum = ;
int Max = ;
for (int i = ; i <= n; i++)
{
a[i][] = read(); a[i][] = read(); a[i][] = read();
if (a[i][]) sum += (long long)(a[i][] - a[i][]) / a[i][] + ;
else sum++;
Max = max(Max, a[i][]);
}
if (!(sum & ))
{
printf("DC Qiang is unhappy.\n");
continue;
}
long long Left = , Right = Max, Mid = (Left + Right) >> ;
while (Left + < Right)
{
if (check(Mid)) Right = Mid;
else Left = Mid;
Mid = (Left + Right) >> ;
}
printf("%d", Right);
int cnt = ;
for (int i = ; i <= n; i++)
if (Right >= a[i][] && Right <= a[i][] && !((Right - a[i][]) % a[i][])) ++cnt;
printf(" %d\n", cnt);
}
}

最新文章

  1. linux之sed用法
  2. centos 7.0 查看内存使用情况 和 查看硬盘使用情况
  3. 如何理解和使用Java package包
  4. House Building---hdu5538(求表面积水题)
  5. 计算视频播放的时间(pts)
  6. windows套接字相关函数
  7. hdoj 1052 Tian Ji -- The Horse Racing【田忌赛马】 【贪心】
  8. 异常处理try-catch-finally笔记
  9. JavaSwing JScrollPane的使用
  10. 《分布式Java应用之基础与实践》读书笔记三
  11. Ali OSS 服务端签名并设置回调,客户端上传文件
  12. iOS中 UIProgressView 技术分享
  13. 如何在代码中取得一个特点type的关节
  14. 【DeepLearning】深入理解dropout正则化
  15. CPP笔记_函数返回局部变量
  16. Excel里面Left这个怎么用?
  17. ECMAScript 6 -- 数组的解构赋值
  18. Spring4学习笔记一:环境搭建与插件安装、基本概念理解
  19. django模型中的关系对应
  20. math.net 拟合

热门文章

  1. BZOJ5157 &amp; 洛谷3970:[TJOI2014]上升子序列——题解
  2. BZOJ5333:[SDOI2018]荣誉称号——题解
  3. [bzoj] 1068 压缩 || 区间dp
  4. [Leetcode] Construct binary tree from preorder and inorder travesal 利用前序和中续遍历构造二叉树
  5. UVA.699 The Falling Leaves (二叉树 思维题)
  6. JavaScript滚动条的制作
  7. bzoj1529 [POI2005]ska Piggy banks 并查集
  8. POJ 3421分解质因数
  9. 深入探析 Rational AppScan Standard Edition 多步骤操作
  10. springboot-部署到centos7