最近刚讲了最短路,说要考试我以为是考最短路,然而只有一道是最短路...

  数据似乎有一点问题,不管了,反正手工测评都是对的,那现在就来看看题吧。

  Balanced:(此处并没有网址)

  题意概述:$n$  $(n<=50,000)$头牛排成一排,给定每头牛的位置,有两种种族,选出一个尽量长的区间使得这个区间内两种牛的数量相等。

  首先可以想到枚举...前缀和...然而还是$O(N^2)$的复杂度,很显然是过不了的。思考一下前缀和的做法,用两个数组分别表示两种牛数量的前缀和。当$a[j]-a[i-1]=b[j]-b[i-1]$时,$x[j]-x[i]$就是一个合法的答案了。那对这个式子进行移项:$a[j]-b[j]=a[i-1]-b[i-1]$,所以可以再开一个数组表示$x[i]=a[i]-b[i]$,如果两个位置的$x$相同,就是一个合法的答案,而且区间越长答案一定更优,所以只需要保存每个$x$出现的第一次和最后一次位置,统计答案时取max就可以了。注意$x$数组可以出现负数,所以将整个数组同时加上$n$就可以避免负数了。

  

 // shzr

 # include <cstdio>
# include <iostream>
# include <algorithm>
# include <cstring> using namespace std; const int maxn=;
int n,s1[maxn],s2[maxn],ans,x[maxn],minn[maxn*],maxx[maxn*];
struct co
{
int id,x;
}a[maxn];
bool cmp(co a,co b)
{
return a.x<b.x;
} int main()
{
scanf("%d",&n);
memset(minn,,sizeof(minn));
for (int i=;i<=n;++i)
scanf("%d%d",&a[i].id,&a[i].x);
sort(a+,a++n,cmp);
minn[]=;
for (int i=;i<=n;++i)
{
if(a[i].id==) s1[i]++;
if(a[i].id==) s2[i]++;
s1[i]+=s1[i-];
s2[i]+=s2[i-];
x[i]=s1[i]-s2[i];
minn[ x[i]+n+ ]=min(minn[ x[i]+n+ ],i);
maxx[ x[i]+n+ ]=max(maxx[ x[i]+n+ ],i);
}
for (int i=;i<=*n+;++i)
{
if(maxx[i]==||minn[i]>n) continue;
if(maxx[i]==minn[i]) continue;
ans=max(ans,a[ maxx[i] ].x-a[ minn[i]+ ].x);
}
printf("%d",ans);
return ;
}

Balanced

  找礼物:(此处依旧没有网址)

  题意概述:

  

  这道题目非常简单...根据距离排个序再扫一遍就做完了。还有一个问题是精度,因为保留四位小数且是截断小数,所以可以将距离乘上一万存进整型变量里。

  

 //shzr

 # include <cstdio>
# include <iostream>
# include <cmath>
# include <algorithm>
# include <cstring>
# include <string> using namespace std; int n,k;
long long x,y;
struct gif
{
string nam;
long long len;
int rk;
}a[]; bool cmp(gif a,gif b)
{
if(a.len==b.len)
return a.rk<b.rk;
return a.len<b.len;
} int main()
{
scanf("%d%d",&n,&k);
for (int i=;i<=n;++i)
{
cin>>a[i].nam;
scanf("%lld%lld",&x,&y);
a[i].len=(long long)(sqrt(x*x+y*y)*);
a[i].rk=i;
}
sort(a+,a++n,cmp);
int ans=,pos=;
long long x=;
for (int i=;i<=k-;++i)
{
x=a[pos].len;
while(a[pos].len==x&&pos<=n)
pos++;
}
if(pos==n+)
{
printf("555…");
}
else
{
x=a[pos].len;
for (int i=pos;i<=n;++i)
{
if(a[i].len==x) ans++;
else break;
}
printf("%lld %d\n",x/,ans);
for (int i=pos;i<=n;++i)
{
if(a[i].len==x) cout<<a[i].nam<<endl;
else break;
}
}
return ;
}

找礼物

  Game:(还是没有网址)

  和四子连棋有一点像的状压搜索题。

  

 //shzr

 # include <cstdio>
# include <iostream> using namespace std; const int dx[]={-,,,};
const int dy[]={,,-,};
int no,beg,en,x,h=,t=;
bool vis[];
int q[];
int b[];
int a[][]; void ad(int x)
{
for (int i=;i>=;--i)
for (int j=;j>=;--j)
{
a[i][j]=x%;
x/=;
}
} int pul()
{
int ans=;
for (int i=;i<=;++i)
for (int j=;j<=;++j)
ans=(ans<<)+a[i][j];
return ans;
} int bfs(int beg)
{
vis[beg]=true;
q[++t]=beg;
b[t]=;
while (h<=t)
{
x=q[h];
if(x==en) return b[h];
ad(x);
for (int i=;i<=;++i)
for (int j=;j<=;++j)
for (int z=;z<;++z)
{
int xx=i+dx[z];
int yy=j+dy[z];
if(xx<||xx>||yy<||yy>)
continue;
if(a[xx][yy]==a[i][j]) continue;
swap(a[xx][yy],a[i][j]);
no=pul();
if(vis[no]==false)
{
vis[no]=true;
q[++t]=no;
b[t]=b[h]+;
}
swap(a[xx][yy],a[i][j]);
}
h++;
}
return -;
} int main()
{
for (int i=;i<=;++i)
for (int j=;j<=;++j)
{
scanf("%1d",&x);
beg=(beg<<)+x;
}
for (int i=;i<=;++i)
for (int j=;j<=;++j)
{
scanf("%1d",&x);
en=(en<<)+x;
}
printf("%d",bfs(beg));
return ;
}

Game

  Car的旅行路线:https://www.luogu.org/problemnew/show/P1027

   一直觉得很麻烦不想做的题出现在了考试里...那只好做一做了。其实就是把所有边连上以后跑最短路。

  

 //shzr

 # include <cstdio>
# include <iostream>
# include <cmath>
# include <cstring>
# include <queue> using namespace std; int co,s,t,A,B,firs[],h=;
struct nod
{
int x,y;
}a[];
bool vis[];
double d[];
typedef pair<double,int> pii;
priority_queue <pii,vector<pii>,greater<pii> > q;
struct edge
{
int nex,too;
double len;
}g[]; void add(int x,int y,double c)
{
g[++h].too=y;
g[h].nex=firs[x];
firs[x]=h;
g[h].len=c;
g[++h].too=x;
g[h].nex=firs[y];
firs[y]=h;
g[h].len=c;
} void find_four(int i)
{
nod A=a[*i+],B=a[*i+],C=a[*i+],D;
long long la,lb,lc;
la=(B.x-C.x)*(B.x-C.x)+(B.y-C.y)*(B.y-C.y);
lb=(A.x-C.x)*(A.x-C.x)+(A.y-C.y)*(A.y-C.y);
lc=(A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y);
if(la+lb==lc)
{
D.x=B.x-C.x+A.x;
D.y=B.y-C.y+A.y;
}
if(la+lc==lb)
{
D.x=-B.x+C.x+A.x;
D.y=-B.y+C.y+A.y;
}
if(lb+lc==la)
{
D.x=B.x+C.x-A.x;
D.y=B.y+C.y-A.y;
}
a[*i+]=D;
} void dij(int s)
{
memset(d,,sizeof(d));
d[s]=;
q.push(make_pair(d[s],s));
int j,beg;
while (q.size())
{
beg=q.top().second;
q.pop();
if(vis[beg]) continue;
vis[beg]=true;
for (int i=firs[beg];i;i=g[i].nex)
{
j=g[i].too;
if(d[beg]+g[i].len>=d[j]) continue;
d[j]=d[beg]+g[i].len;
q.push(make_pair(d[j],j));
}
}
} int main()
{
scanf("%d%d%d%d",&s,&t,&A,&B);
for (int i=;i<s;++i)
{
scanf("%d%d%d%d%d%d",&a[*i+].x,&a[*i+].y,&a[*i+].x,&a[*i+].y,&a[*i+].x,&a[*i+].y);
scanf("%d",&co);
find_four(i);
for (int m=;m<=;++m)
for (int n=m+;n<=;++n)
add(*i+m,*i+n,co*sqrt((a[*i+m].x-a[*i+n].x)*(a[*i+m].x-a[*i+n].x)+(a[*i+m].y-a[*i+n].y)*(a[*i+m].y-a[*i+n].y)));
for (int j=;j<=;++j)
for (int k=;k<=*i;++k)
add(*i+j,k,sqrt((a[*i+j].x-a[k].x)*(a[*i+j].x-a[k].x)+(a[*i+j].y-a[k].y)*(a[*i+j].y-a[k].y))*t);
}
for (int i=;i<=;++i)
{
add(,(A-)*+i,);
add(s*+,(B-)*+i,);
}
dij();
printf("%.1lf",d[s*+]);
return ;
}

Car的旅行路线

---shzr

loli的混合算法测试的更多相关文章

  1. RGBA alpha 透明度混合算法实现和测试

    目录 1.算法叙述 1.1.透明度混合算法1 1.3.简易Alpha混合算法 2.算法实现代码和测试 2.1.透明度混合算法1实现代码 2.1.AlphaBlend算法实现代码 2.3.测试截图 2. ...

  2. OpenCV——PS 图层混合算法(一)

    详细的算法原理能够參考 PS图层混合算法之中的一个(不透明度,正片叠底,颜色加深,颜色减淡) // PS_Algorithm.h #ifndef PS_ALGORITHM_H_INCLUDED #de ...

  3. OpenCV——PS 图层混合算法 (三)

    具体的算法原理可以参考 PS图层混合算法之三(滤色, 叠加, 柔光, 强光) // PS_Algorithm.h #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ ...

  4. OpenCV——PS 图层混合算法 (二)

    具体的算法原理可以参考 PS图层混合算法之二(线性加深,线性减淡,变亮,变暗) // PS_Algorithm.h #ifndef PS_ALGORITHM_H_INCLUDED #define PS ...

  5. OpenCV——PS图层混合算法(六)

    具体的算法原理可以参考: PS图层混合算法之六(差值,溶解, 排除) // PS_Algorithm.h #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGO ...

  6. OpenCV——PS 图层混合算法 (四)

    具体的算法原理可以参考 PS图层混合算法之四(亮光, 点光, 线性光, 实色混合) // PS_Algorithm.h #ifndef PS_ALGORITHM_H_INCLUDED #define ...

  7. 交易准实时预警 kafka topic 主题 异常交易主题 低延迟 event topic alert topic 内存 算法测试

    https://www.ibm.com/developerworks/cn/opensource/os-cn-kafka/index.html 周 明耀2015 年 6 月 10 日发布 示例:网络游 ...

  8. 图像处理之增强---图像增强算法四种,图示与源码,包括retinex(ssr、msr、msrcr)和一种混合算法

    申明:本文非笔者原创,原文转载自:http://blog.csdn.net/onezeros/article/details/6342661 两组图像:左边较暗,右边较亮 第一行是原图像,他们下面是用 ...

  9. Python: PS 图层混合算法汇总

    本文用 Python 实现了PS 中的图层混合算法,把很多常见的图层混合算法都汇总到了一起,比起以前写的算法,就是用矩阵运算代替了很耗时的for 循环,运行效率有所提升.具体的代码如下: import ...

随机推荐

  1. 导航栏pop拦截

    一.新建一个分类 二.导入分类头文件 三.需要拦截的地方实现方法   - (BOOL)navigationShouldPopTwo  即可 .h #import <UIKit/UIKit.h&g ...

  2. Java基础——JSP(二)

    一.JSP隐式对象概述 为了简化jsp表达式和脚本片断代码的编写,JSP一共提供了9个预先定义的变量,这些变量也称为隐式对象或内置对象. 在 jsp生成的Servlet源码中,有如下声明: publi ...

  3. 【Tomcat】配置Web界面管理

    到Tomcat的cof目录下的tomcat-users.xml文件进行配置 配置如下: <?xml version='1.0' encoding='utf-8'?><tomcat-u ...

  4. 使用spring的JavaMail发送邮件

    以前我们使用JavaMail发送邮件,步骤挺多的.现在的项目跟Spring整合的比较多.所以这里主要谈谈SpringMail发送. 导入jar包. 配置applicationContext-email ...

  5. 一张图看懂Mysql的join连接

    INNER JOIN:当两个表中都匹配时返回行. LEFT JOIN:返回左表中的所有行,即使右表中没有匹配项也是如此. RIGHT JOIN:返回右表中的所有行,即使左表中没有匹配项也是如此. FU ...

  6. 关于子元素的margin-top溢出和元素浮动对父元素高度影响解决方案

    以下是个人学习笔记,仅供学习参考. 1.关于子元素的margin-top作用在无margin-top-border的父元素上导致子元素的margin-top溢出问题. 在给没有margin-top-b ...

  7. 关于Dynamics CRM 安装用户权限的说明

    做了这么多年的CRM项目,但发现部分客户的IT安全监管很严格,在CRM系统安装时,要求给出系统安排账号的权限. 这时小伙伴们 坚持不住了~~ 天天都是用域控的admin操作,这个时候问我要什么权限,于 ...

  8. [原创.数据可视化系列之八]使用等d3进行灰度图转伪彩色

    对灰度图进行彩色化是数据可视化中常见的需求,使用d3在客户端比较容易实现,本文使用d3生成图片,并显示: 代码如下: 代码中首先下载数据文件,然后设定d3的色带信息,生成一个空白的canvas元素,并 ...

  9. WOSA/XFS PTR Form解析库—头文件

    class AFX_EX_CLASS CNuXfsForm {public: CNuXfsForm(); ~CNuXfsForm(); /******************************* ...

  10. 安卓逆向(一)--Smali基础

    安卓逆向(一)--Smali基础 标签(空格分隔): 安卓逆向 APK的组成 文件夹 作用 asset文件夹 资源目录1:asset和res都是资源目录但有所区别,见下面说明 lib文件夹 so库存放 ...