%%%ZZYY

只是因为是Z才模一下的。

ZJ一下:

考试T1写了三张纸但是它死了。

T2T3暴力叕写跪了。

考试一定一定不能不严密,少推两个交点是要命的啊。

就因为叕叕少开龙龙见祖宗了。

如果考试能推出一个点就试试推两个,有两个就试试推三个,别一直觉得自己能A……

……话说我对拍半天愣是没卡掉。

TJTime:

T1

给大家讲讲简单高考数学。

首先上来就可以得出一句话题意。

给定$a,b,S$求当$ax+by=S$时$|x|+|y|$的最小值

求前式的特解还是很容易的辣,直接$exgcd$硬上即可。

问题出在如何将后式的最小值计算出。

记特解值为$x',y'$,当$a,b$互质时一定有$x=x'+kb,y=y'-kb(k \in \mathbb{Z})$

若不互质则左右同除$gcd$。

于是转化为求$$\min\{|x'+kb|+|y'-ka|\}$$

高考数学告诉我们,遇到绝对值要想办法去绝对值。

于是可以分$4$种情况:(等于可包含于下面任一种情况)

$$
\begin{array}{cc}
\begin{cases}
x'+kb<0\\
y'-ka<0
\end{cases}&
\begin{cases}
x'+kb<0\\
y'-ka>0
\end{cases}\\
\begin{cases}
x'+kb>0\\
y'-ka<0
\end{cases}&
\begin{cases}
x'+kb>0\\
y'-ka>0
\end{cases}\\
\end{array}
$$

那么这四种情况下的直线可以表示为:

$$
\begin{cases}
t=(a-b)k-x'-y'\\
t=(-a-b)k-x'+y'\\
t=(a+b)k+x'-y'\\
t=(-a+b)k+x'+y'
\end{cases}
$$
从高考数学的严密性出发,下面应该再判断$-\frac{x'}{b}$与$\frac{y'}{a}$的大小关系然后计算交点。

所以图像的可能形状如下:

但是还有一种,考试时没有考虑到,因为我们不能保证图像连续(另外可能的情况暂不列出),于是,如下:

但是在本题中,并不需要此种做法,我们可以直接计算四条直线之间的交点,理论上可以有$C_4^2$种方案,但实际计算得出的结果并没有那么多。

即$t \in \{\frac{y}{a},-\frac{x}{b},\frac{x-y}{-a-b},\frac{x+y}{a-b}\}$

终于……

#include <iostream>
#include <cstring>
#include <cstdio>
#define N 111111
#define LL long long using namespace std; LL a,b,arr[N],nn;
LL ans;
inline LL Abs(LL x){
return x<0?-x:x;
}
LL exgcd(LL &x,LL &y,LL _a,LL _b){
if(_b==0){
x=1;
y=0;
return _a;
}
LL ret=exgcd(x,y,_b,_a%_b);
LL z=x;
x=y;
y=z-_a/_b*y;
return ret;
}
LL getans(LL x,LL y,LL t){
return min(Abs(x+t*b)+Abs(y-t*a),
min(Abs(x+(t-1)*b)+Abs(y-(t-1)*a),
Abs(x+(t+1)*b)+Abs(y-(t+1)*a)));
}
int main(){
LL x,y,gcn;
scanf("%lld%lld%lld",&nn,&a,&b);
gcn=exgcd(x,y,a,b);
for(int i=1;i<=nn;i++)
scanf("%lld",arr+i);
a/=gcn,b/=gcn;
for(int i=1;i<=nn;i++){
if(arr[i]%gcn!=0){
puts("-1");
return 0;
}
LL xd=x*arr[i]/gcn,yd=y*arr[i]/gcn,t;
LL nans[10];
t=-xd/b;
nans[0]=getans(xd,yd,t); t=yd/a;
nans[1]=getans(xd,yd,t); t=(xd+yd)/(a-b);
nans[2]=getans(xd,yd,t); t=(xd-yd)/(-a-b);
nans[3]=getans(xd,yd,t); ans+=min(min(nans[0],nans[1]),min(nans[2],nans[3]));
}
cout<<ans<<endl;
}

其实还可以三分直接过。

T2

我去做DZKP了。

T3

做了。

发现要求每两个特殊点之间的距离,

第一想法是$Floyd$(多源)

但是显然T

下面想如何将单源最短路搞成多源。

记录当下的点从哪些点转移过来,最后扫边更新答案就行了。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#define LL long long
#define N 222222
#define pre first
#define len second using namespace std; typedef pair<LL,LL> pll;
template <typename Tp>
class Myqueue{
Tp A[N*10];
int f,b;
public:
Myqueue(){f=b=0;}
void clear(){f=b=0;}
void push(const Tp k){A[b++]=k;}
void pop(){f++;}
bool empty(){return f==b;}
Tp front(){return A[f];}
void pour(){
for(int i=f;i<b;i++){
cout<<A[i]<<" ";
}
cout<<endl;
}
};
struct Edge{
int f,t,next;
LL v;
}rs[2*N];
vector <int>sp;
Myqueue <int> q;
pll dis[N];
int pn,edn,spn,
fl[N],cnt=0;
LL ans[N];
bool inq[N]; void add(int f,int t,int v){
rs[cnt].f=f;
rs[cnt].t=t;
rs[cnt].next=fl[f];
rs[cnt].v=v;
fl[f]=cnt++;
}
void SPFA(){
for(int i=1;i<=pn;i++)
dis[i]=make_pair(0,1e15);
for(int i=0;i<sp.size();i++){
dis[sp[i]].pre=sp[i];
dis[sp[i]].len=0;
q.push(sp[i]);
inq[sp[i]]=1;
}
while(!q.empty()){
int f=q.front();q.pop();
// q.pour();
for(int i=fl[f];i!=-1;i=rs[i].next){
int t=rs[i].t;
if(dis[t].len>dis[f].len+rs[i].v){
dis[t]=make_pair(dis[f].pre,dis[f].len+rs[i].v);
if(!inq[t]){
q.push(t);
inq[t]=1;
}
}
}
inq[f]=0;
}
/* for(int i=1;i<=pn;i++){
cout<<i<<" "<<dis[i].len<<" "<<dis[i].pre<<endl;
}*/
}
int main(){
int a,b;
LL v;
cin.sync_with_stdio(false);
memset(ans,0x7f,sizeof ans);
memset(fl,-1,sizeof fl);
cin>>pn>>edn>>spn;
for(int i=1;i<=spn;i++){
cin>>a;
sp.push_back(a);
}
for(int i=1;i<=edn;i++){
cin>>a>>b>>v;
add(a,b,v);
add(b,a,v);
}
SPFA();
for(int i=0;i<cnt;i++){
int af=dis[rs[i].f].pre,
bf=dis[rs[i].t].pre;
// cout<<af<<" "<<bf<<endl;
if(af!=bf){
LL val=dis[rs[i].t].len+dis[rs[i].f].len+rs[i].v;
ans[af]=min(ans[af],val);
ans[bf]=min(ans[bf],val);
}
}
for(int i=0;i<spn;i++)
printf("%lld ",ans[sp[i]]);
puts("");
}

19-10-29-Z的更多相关文章

  1. 背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox

    [源码下载] 背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox 作者:webabcd ...

  2. SpringBoot+mybatis:报错Fri Oct 19 14:29:24 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requiremen

    报错:Fri Oct 19 14:29:24 CST 2018 WARN: Establishing SSL connection without server's identity verifica ...

  3. 【Selenium】【BugList9】windows环境,fp = open("./"+ time.strftime("%Y-%m-%d %H:%M:%S") + " result.html",'wb'),报错:OSError: [Errno 22] Invalid argument: './2018-09-05 10:29:32 result.html'

    [代码] if __name__=="__main__": suite = unittest.TestSuite() suite.addTest(Baidu("test_ ...

  4. 10.29 正睿停课训练 Day11

    目录 2018.10.29 正睿停课训练 Day11 A 线段树什么的最讨厌了(思路 DFS) B 已经没有什么好害怕的了(差分 前缀和) C 我才不是萝莉控呢(DP 贪心 哈夫曼树) 考试代码 A ...

  5. 第17次Scrum会议(10/29)【欢迎来怼】

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华 小组照片 二.开会信息 时间:2017/10/29 17:20~17:42,总计22min.地点:东北师 ...

  6. Ubuntu 19.10 发布 | 云原生生态周报 Vol. 24

    作者 | 木苏.进超.冬岛.元毅.心水.衷源 业界要闻 1.云原生编程语言 Pulumi 1.0 pulumi ,一款中立的开源云开发平台,Pulumi 支持多语言.混合云环境.完全可扩展.初期支持 ...

  7. [Linux] 在 Ubuntu 19.10 上开启 SSH 服务并允许远程登录

    在 Ubuntu 19.10 上安装 SSH,并开启服务 0.检查并确认系统当前是否已安装SSH: sudo ps -e | grep ssh 如果只有 ssh-agent 说明 ssh-server ...

  8. [Linux] 树莓派 4B 安装 Ubuntu 19.10 (Eoan Ermine) IOT 版

    硬件:Raspberry Pi 4B系统:Ubuntu 19.10 (Eoan Ermine) for IOT官网:https://ubuntu.com/download/iot/raspberry- ...

  9. 2016.10.29初中部上午NOIP普及组比赛总结

    2016.10.29[初中部 NOIP普及组 ]模拟赛 做得好爽! 进度: 比赛:35+45+AC+0=180 改题:AC+AC+AC+0=300 幸运的数 有点无语--之前怕超限,还特意利用程序打了 ...

  10. Ubuntu 19.10 安装 jupyter

    安装pip3 ubuntu 19.10 已经没有python了,取代的是python3. 执行sudo apt install python3-pip安装pip3 安装jupyter 执行sudo p ...

随机推荐

  1. 2018湘潭大学程序设计竞赛【B】

    题目链接: https://www.nowcoder.com/acm/contest/105/B 题意: 给你一个字母矩阵,和测试组数,让你统计字符串的字符累计出现的次数,然后让你找出需要找的字符,这 ...

  2. Linux CPU负载状态:%us/%sy/%ni/%id/%wa/%hi/%si/%st含义

    原文 Linux CPU负载状态:%us/%sy/%ni/%id/%wa/%hi/%si/%st含义 缙哥哥发现用了雅黑的探针,在 Linux 的 CPU 状态信息中发现,有“%us.%sy.%ni. ...

  3. 归档和解档配合NSFile存储数据

    NSString *Name = @"yc"; //第一个常量NSDocumentDirectory表示正在查找沙盒Document目录的路径(如果参数为NSCachesDirec ...

  4. 【模板篇】A* 寻路算法

    上次在做k短路的时候说到了A*, 但是并没有仔细的研究A*寻路, 毕竟k短路中的A*也不怎么标准… A*寻路的过程网上还是有很多的, 讲得也很清楚, 不妨跟着里面的图示自己动手操作一下, 基本一遍就能 ...

  5. JS随机产生颜色

    <script> function selectForm(lowerValue,upperValue){ var choices=upperValue-lowerValue+1; retu ...

  6. android Toast提示异常:java.lang.RuntimeException: Can't create handler inside thread that has not called

    Toast只能在UI线程弹出,解决此问题可以在Toast前后加两行代码,如下所示: Looper.prepare(); Toast.makeText(getApplicationContext(),& ...

  7. 携程的 Dubbo 之路

    本篇文章整理自董艺荃在 Dubbo 社区开发者日上海站的演讲. 缘起 携程当初为什么要引入 Dubbo 呢?实际上从 2013 年底起,携程内主要使用的就是基于 HTTP 协议的 SOA 微服务框架. ...

  8. 「题解」:$Game$

    问题 B: $Game$ 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 对于最初加入的每一个元素开桶记录出现次数. 然后记录一个前p个元素最大值. 先由先手玩家取走一 ...

  9. 莫比乌斯反演——hdu6390推公式

    /*首先要把原始化简成 k/phi[k] 的格式,然后把有关k的sigma提出来,后面就是求gcd(i,j)==k的莫比乌斯反演这里要用整除分块加下速*/#include<bits/stdc++ ...

  10. BZOJ 1296(SCOI 2009) 粉刷匠

    1296: [SCOI2009]粉刷匠 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2544 Solved: 1466 [Submit][Statu ...