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

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

  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. Spring源码分析:非懒加载的单例Bean初始化前后的一些操作

    之前两篇文章Spring源码分析:非懒加载的单例Bean初始化过程(上)和Spring源码分析:非懒加载的单例Bean初始化过程(下)比较详细地分析了非懒加载的单例Bean的初始化过程,整个流程始于A ...

  2. Oracle中如何写存储过程

    >存储过程是什么? 存储过程是一种命名的PL/SQL程序块,输入.输出参数数量[0个或多个],通常没有返回值[也有特殊的情况]. 运行SQL语句时,Oracle是要先编译再执行的:而存储过程是已 ...

  3. HDU3416(KB11-O spfa+最大流)

    Marriage Match IV Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  4. python-工厂方法模式

    源码地址:https://github.com/weilanhanf/PythonDesignPatterns 简单工厂模式的不足: 在简单工厂模式中,只提供了一个工厂类,该工厂类处于对产品类进行实例 ...

  5. Object.assign简单总结

    定义 Object.assign方法用来将源对象source的所有可枚举属性复制到目标对象target.至少需要两个对象作为参数,第一个参数为源对象,后面的均为目标对象.(以下用source代指源对象 ...

  6. javascript 数组求交集/差集/并集/过滤重复

    最近在小一个小程序项目,突然发现 javscript 对数组支持不是很好,连这些基本的功能,都还要自己封装.网上查了下,再结合自己的想法,封装了一下,代码如下. //数组交集 Array.protot ...

  7. AJAX的一些基础和AJAX的状态

    大佬们,我又回来了,最近好几天都没写博客了,别问我干啥去了,我只是去围观奶茶妹变成抹茶妹而已 前几天我们一起封装了一个AJAX,那今天我们来说说AJAX的一些基础和AJAX的状态码 首先,啥是AJAX ...

  8. JavaSE——线程同步

    为什么需要线程同步? 同步就是协同步调,按预定的先后次序进行运行.如:你说完,我再说而并非一起动作.“同”字应是指协同.协助.互相配合. 如进程.线程同步,可理解为进程或线程A和B一块配合,A执行到一 ...

  9. 【Redis】Redis学习(二) master/slave、sentinel、Cluster简单总结

    项目中用到Redis,所以准备学习一下,感觉Redis的概念还是很多的,什么主从模式.sentinel模式.集群模式的,一下子都晕了,我觉得还是有必要先理清这些基本概念再说. 一.单节点实例 单节点实 ...

  10. 分布式事务实现-Percolator

    Google为了解决网页索引的增量处理,以及维护数据表和索引表的一致性问题,基于BigTable实现了一个支持分布式事务的存储系统.这里重点讨论这个系统的分布式事务实现,不讨论percolator中为 ...