loli的混合算法测试
最近刚讲了最短路,说要考试我以为是考最短路,然而只有一道是最短路...
数据似乎有一点问题,不管了,反正手工测评都是对的,那现在就来看看题吧。
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的混合算法测试的更多相关文章
- RGBA alpha 透明度混合算法实现和测试
目录 1.算法叙述 1.1.透明度混合算法1 1.3.简易Alpha混合算法 2.算法实现代码和测试 2.1.透明度混合算法1实现代码 2.1.AlphaBlend算法实现代码 2.3.测试截图 2. ...
- OpenCV——PS 图层混合算法(一)
详细的算法原理能够參考 PS图层混合算法之中的一个(不透明度,正片叠底,颜色加深,颜色减淡) // PS_Algorithm.h #ifndef PS_ALGORITHM_H_INCLUDED #de ...
- OpenCV——PS 图层混合算法 (三)
具体的算法原理可以参考 PS图层混合算法之三(滤色, 叠加, 柔光, 强光) // PS_Algorithm.h #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ ...
- OpenCV——PS 图层混合算法 (二)
具体的算法原理可以参考 PS图层混合算法之二(线性加深,线性减淡,变亮,变暗) // PS_Algorithm.h #ifndef PS_ALGORITHM_H_INCLUDED #define PS ...
- OpenCV——PS图层混合算法(六)
具体的算法原理可以参考: PS图层混合算法之六(差值,溶解, 排除) // PS_Algorithm.h #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGO ...
- OpenCV——PS 图层混合算法 (四)
具体的算法原理可以参考 PS图层混合算法之四(亮光, 点光, 线性光, 实色混合) // PS_Algorithm.h #ifndef PS_ALGORITHM_H_INCLUDED #define ...
- 交易准实时预警 kafka topic 主题 异常交易主题 低延迟 event topic alert topic 内存 算法测试
https://www.ibm.com/developerworks/cn/opensource/os-cn-kafka/index.html 周 明耀2015 年 6 月 10 日发布 示例:网络游 ...
- 图像处理之增强---图像增强算法四种,图示与源码,包括retinex(ssr、msr、msrcr)和一种混合算法
申明:本文非笔者原创,原文转载自:http://blog.csdn.net/onezeros/article/details/6342661 两组图像:左边较暗,右边较亮 第一行是原图像,他们下面是用 ...
- Python: PS 图层混合算法汇总
本文用 Python 实现了PS 中的图层混合算法,把很多常见的图层混合算法都汇总到了一起,比起以前写的算法,就是用矩阵运算代替了很耗时的for 循环,运行效率有所提升.具体的代码如下: import ...
随机推荐
- c#数据库设计--1、概述
一.数据库设计的概念 数据库设计是将数据库中的数据实体及这些数据实体之间的关系,进行规划和结构化的过程. 二.数据库设计的重要性 设计决定代码量,一将不行,累死三军. 如果一个数据库没有进行一个良好的 ...
- SQL语句,表中的列字段字符串合并 和 字符串拆分成表
研究了两天也没有研究的很明白,但是问题做出来了, 如下表中的字段,第一级是由逗号隔开字符串,第二级是由空格隔开的字符串,现在想取空格字符串中的第几个空格前后的字符串, 所用到的工具,1.是 for x ...
- Eclipse 各种小图标的含意
- java图片压缩(Thumbnails)
package com.hzxc.groupactivity.server.util; import java.awt.image.BufferedImage; import java.io.*; i ...
- Android-远程Service
http://blog.csdn.net/guolin_blog/article/details/9797169 http://www.jianshu.com/p/eeb2bd59853f 将一个普通 ...
- Vue脚手架
https://cli.vuejs.org/zh/guide/ Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供: 通过 @vue/cli 搭建交互式的项目脚手架. 通过 @vu ...
- POJ2955(KB22-C 区间DP)
Brackets Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 7823Accepted: 4151 Description We ...
- 图片链接转成base64
一半需要我的图像转换为base64字符串,这样我们可以把我的形象到服务器.现在我们提供一个js: function convertImgToBase64(url, callback, outputFo ...
- tilestache + mbutil应用
1. 安装pip. 我们同样需要在Python的官网上去下载,下载地址是: https://pypi.python.org/pypi/pip#downloads 2. 解压. 解压pip-9.0.1. ...
- ajax分页查询
(1)先写个显示数据的页面,分页查询需要那几个部分呢? 1.首先是查询的文本框输入,还有查询按钮,那么就开始写代码吧 1 2 3 4 <div> <input type=" ...