枚举/二分


  C题太神窝看不懂……

核聚变反应强度

  QwQ很容易发现次小的公约数一定是gcd的一个约数,然后……我就傻逼地去每次算出a[1],a[i]的gcd,然后枚举约数……这复杂度……哦呵呵。。。

  正解是先找到a[1]的所有质因数啊……然后在刚刚那个算法的“枚举gcd的约数”的时候直接枚举这些质因数就好了……

 //UOJ Round3 A
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
typedef long long LL;
inline LL getint(){
LL r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=(v<<)+(v<<)-''+ch;
return r*v;
}
const int N=1e6+;
/*******************template********************/ int n,tot,cnt;
LL a[N],b[N],prime[N];
bool vis[N];
inline LL gcd(LL a,LL b){return b?gcd(b,a%b):a;}
int main(){
#ifndef ONLINE_JUDGE
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
#endif
n=getint();
F(i,,n) a[i]=getint();
for(LL i=;i*i<=a[];i++)
if (!vis[i]){
prime[++tot]=i;
for(LL j=i+i;j*j<=a[];j+=i) vis[j]=;
}
F(i,,tot) if (a[]%prime[i]==) b[++cnt]=prime[i];
LL tmp;
F(i,,n){
tmp=gcd(a[],a[i]);
if (tmp==) {printf("-1 "); continue;}
bool sign=;
F(j,,cnt)
if (tmp%b[j]==){
printf("%lld ",tmp/b[j]);
sign=;
break;
}
if (sign) printf("1 ");
}
return ;
}

铀仓库

  题解好神啊……如果要直接计算T时间以内能搬几个箱子,那么我们需要枚举s,然后再算每个s在T时间内能搬多少。

  一看就感觉要爆呀。。。

  解决方法是二分= =将最优性问题转化成判定性问题,现在我们的问题就是:给定一个箱子数量K,问最短的时间是多少。

  这样的话我们仍旧可以枚举s,但是由于箱子数是固定的,所以我们根据s-1的答案可以比较方便地得到s的答案。

  

  实现细节方面:我们在放弃左端点箱子而去搬右端点箱子的时候,需要维护一下是哪边先归零……然而我写分类讨论写了好长啊……而@delayyy神犇很简短的就处理完了……事实上我好像想多了……并不需要分类讨论……只要每次取最小值?。。。就可以了……

 //UOJ Round3 B
//orz delayyy
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=5e5+;
/*******************template********************/ int n,a[N],x[N],use[N];
LL t,s[N];
inline LL d(int i,int j){return x[j]-x[i];}
inline LL sum(int l,int lc,int r,int rc){
return l==r ? rc-lc : s[r-]-s[l]+a[l]-lc+rc;
}
bool check(LL K){
int l=,lc=,r=n+,rc=; LL cur=,sa=;
F(i,,n){
if (sa+a[i]<=K) sa+=a[i],cur+=d(,i)*a[i];
else {r=i,rc=K-sa,cur+=d(,i)*rc; break;}
}
if (cur<=t) return ; F(i,,n){
cur+=d(i-,i)*(sum(l,lc,i,)-sum(i,,r,rc));
while(r<=n && d(l,i)>d(i,r)){
int z=min(a[l]-lc,a[r]-rc);
cur+=(d(i,r)-d(l,i))*z;
if (lc+=z,lc>=a[l]) ++l,lc=;
if (rc+=z,rc>=a[r]) ++r,rc=;
}
if (cur<=t) return ;
}
return ;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("B.in","r",stdin);
freopen("B.out","w",stdout);
#endif
n=getint(); scanf("%lld",&t); t/=;
F(i,,n) x[i]=getint();
F(i,,n) a[i]=getint(),s[i]=s[i-]+a[i]; LL L=,R=s[n],mid,ans=;
while(L<=R){
mid=L+R>>;
if (check(mid)) ans=mid,L=mid+;
else R=mid-;
}
printf("%lld\n",ans);
return ;
}

【UOJ Round #3】的更多相关文章

  1. 【UOJ Round #5】

    构造+贪心/数论 为什么只有两个标题呢……因为第二题我不会…… 怎样提高智商 构造题……然而一开始半天我都yy不出来…… 后来我想:这题应该不会特别麻烦,而且既然样例只给了1,可能再给大一点就让人发现 ...

  2. 【UOJ Round #1】

    枚举/DP+排列组合 缩进优化 QAQ我当时一直在想:$min\{ \sum_{i=1}^n (\lfloor\frac{a[i]}{x}\rfloor + a[i] \ mod\ x) \}$ 然而 ...

  3. 【UOJ Round #8】

    A 一道不错的题,虽然大家都觉得是水题,然而蒟蒻我想出来的好慢……Orz alpq 发现其实就是一个网格图,每一个大块都是同一颜色……横纵坐标互不干扰…… //UOJ Round #8 A #incl ...

  4. 【CS round 34】Minimize Max Diff

    [题目链接]:https://csacademy.com/contest/round-34/task/minimize-max-diff/ [题意] 给你n个数字; 数组按顺序不下降; 让你删掉k个数 ...

  5. 【CS Round 34】Max Or Subarray

    [题目链接]:https://csacademy.com/contest/round-34/summary/ [题意] 让你找一个最短的连续子串; 使得这个子串里面所有数字or起来最大; [题解] 对 ...

  6. UOJ #30【CF Round #278】Tourists

    求从$ x$走到$ y$的路径上可能经过的最小点权,带修改  UOJ #30 $ Solution:$ 如果两个点经过了某个连通分量,一定可以走到这个连通分量的最小值 直接构建圆方树,圆点存原点的点权 ...

  7. UOJ #30. 【CF Round #278】Tourists

    Description Cyberland 有 n 座城市,编号从 1 到 n,有 m 条双向道路连接这些城市.第 j 条路连接城市 aj 和 bj.每天,都有成千上万的游客来到 Cyberland ...

  8. 【57.97%】【codeforces Round #380A】Interview with Oleg

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  9. 【42.86%】【Codeforces Round #380D】Sea Battle

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

随机推荐

  1. 关于 facebook

    2017/10/29 Facebook账号分分钟被禁用,见怪不怪就好了,禁了就申诉呗 Facebook 如果遇到帐号被停用 / 帐号被封锁,大致上来说有叁个原因: 1, 名字用假名 2, 一个人拥有多 ...

  2. 命令行fuck神器

     文章 thefuck  git thefuck

  3. 接口调试工具ApiPost的发送超时时间设置方法

    有部分使用ApiPost的同学反应:发送接口调试时,响应超时时间设置的太短导致接口访问失败,怎么设置呢? 就连百度也有很多人在搜: 今天就来说一说. ApiPost简介: ApiPost是一个支持团队 ...

  4. C# Activex调用USB摄像头--附带源码

    前言 最近在整理一些自己写过的东西,也算是重新熟悉一下并且优化一下吧. 需求:获取本地USB摄像头视频显示,并且获取图片数据给底层做人脸识别. 记得当时直接采用H5已经做好了,调试好了....结果放上 ...

  5. GEEK-2018之隐藏在混乱之中的绝密情报 writeup

    题目如上 打开题目后发现,提示robots 随后提示又需要改一改名字 修改文件名为humans.txt之后发现 有个备份文件,直接访问www.zip就可以下载了 下载打开后如下: 在其中看到了unse ...

  6. Windows 7硬盘安装CentOS 6.4 双系统 (WIN7下硬盘安装Linux(Fedora 16,CentOS 6.2,Ubuntu 12.04))

     WIN7下硬盘安装Linux(Fedora 16,CentOS 6.2,Ubuntu 12.04) 最近在看<鸟哥私房菜:基础学习篇>,觉得很不错,想要用U盘装个windows 7 和 ...

  7. xenserver系列之安装与配置

    文章内容 1 ,安装 一.选择键盘类型:US. 二.这个是欢迎界面,选择“OK”即可. 三.这个是使用协议,我们必须得接受,否则就不能继续安装了! 四.这个是警告,告诉你XenServer所需要的硬件 ...

  8. 使用NewLife网络库构建可靠的自动售货机Socket服务端(一)

    最近有个基于tcp socket 协议和设备交互需求,想到了新生命团队的各种组件,所以决定用NewLife网络库作为服务端来完成一系列的信息交互. 第一,首先说一下我们需要实现的功能需求吧 1,首先客 ...

  9. ThreadLocal 详解

    什么是ThreadLocal 根据JDK文档中的解释:ThreadLocal的作用是提供线程内的局部变量,这种变量在多线程环境下访问时能够保证各个线程里变量的独立性. 从这里可以看出,引入Thread ...

  10. Slickflow.NET 开源工作流引擎高级开发(三) -- 并行分支容器与会签工作流模式的组合

    前言:  流程引擎的核心功能是负责解析流程定义XML和流转,业务环节的不断积累,让人们不断总结和抽象出一些模式,这些模式统称为工作流模式(Workflow Pattern).本文的重点就是介绍一种常见 ...