HDU 4768: Flyer
2024-09-28 00:46:21
题意:
有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);
}
}
最新文章
- linux之sed用法
- centos 7.0 查看内存使用情况 和 查看硬盘使用情况
- 如何理解和使用Java package包
- House Building---hdu5538(求表面积水题)
- 计算视频播放的时间(pts)
- windows套接字相关函数
- hdoj 1052 Tian Ji -- The Horse Racing【田忌赛马】 【贪心】
- 异常处理try-catch-finally笔记
- JavaSwing JScrollPane的使用
- 《分布式Java应用之基础与实践》读书笔记三
- Ali OSS 服务端签名并设置回调,客户端上传文件
- iOS中 UIProgressView 技术分享
- 如何在代码中取得一个特点type的关节
- 【DeepLearning】深入理解dropout正则化
- CPP笔记_函数返回局部变量
- Excel里面Left这个怎么用?
- ECMAScript 6 -- 数组的解构赋值
- Spring4学习笔记一:环境搭建与插件安装、基本概念理解
- django模型中的关系对应
- math.net 拟合
热门文章
- BZOJ5157 &; 洛谷3970:[TJOI2014]上升子序列——题解
- BZOJ5333:[SDOI2018]荣誉称号——题解
- [bzoj] 1068 压缩 || 区间dp
- [Leetcode] Construct binary tree from preorder and inorder travesal 利用前序和中续遍历构造二叉树
- UVA.699 The Falling Leaves (二叉树 思维题)
- JavaScript滚动条的制作
- bzoj1529 [POI2005]ska Piggy banks 并查集
- POJ 3421分解质因数
- 深入探析 Rational AppScan Standard Edition 多步骤操作
- springboot-部署到centos7