0x05 排序
说是排序结果就是各种奇技淫巧
中位数被坑多了久病成医,例题一题搞笑一题糖果传递(昨晚精神那么好效率还那么差)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL; int n,m,T;
LL X[],Y[],s[];
LL reX()
{
LL ave=T/n;
for(int i=;i<=n;i++)s[i]=s[i-]+ave-X[i];
sort(s+,s+n+);
LL ret=;
for(int i=;i<=n;i++)
ret+=abs(s[i]-s[(n+)/]);
return ret;
}
LL reY()
{
LL ave=T/m;
for(int i=;i<=m;i++)s[i]=s[i-]+ave-Y[i];
sort(s+,s+m+);
LL ret=;
for(int i=;i<=m;i++)
ret+=abs(s[i]-s[(m+)/]);
return ret;
} int main()
{
int x,y;
scanf("%d%d%d",&n,&m,&T);
for(int i=;i<=T;i++)
scanf("%d%d",&x,&y), X[x]++, Y[y]++;
if(T%n==&&T%m==)printf("both %lld\n",reX()+reY());
else if(T%n==)printf("row %lld\n",reX());
else if(T%m==)printf("column %lld\n",reY());
else printf("impossible\n");
return ;
}
bzoj3032
有一个叫对顶堆“算法”的东西,超级搞笑,就是在线求中位数,用两个堆一个存一半,应该是因为我见过类似的套路bzoj3192: [JLOI2013]删除物品,就没意思了。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
typedef long long LL; priority_queue<int> h;
priority_queue< int,vector<int>,greater<int> > t; int aslen,as[];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int zz,n;
scanf("%d%d",&zz,&n);
while(!h.empty())h.pop();
while(!t.empty())t.pop(); aslen=;int x,mid;
h.push(-);
t.push();
for(int i=;i<=n;i++)
{
scanf("%d",&x);
if(i%==)
{
if(x<h.top()) mid=h.top(), h.pop(), h.push(x);
else if(t.top()<x) mid=t.top(), t.pop(), t.push(x);
else mid=x;
as[++aslen]=mid;
h.push(mid);
}
else
{
if(x<h.top()) t.push(h.top()) ,h.pop() , h.push(x);
else h.push(t.top()) ,t.pop() , t.push(x); if(h.size()>t.size()) t.push(h.top()) ,h.pop();
else if(h.size()<t.size()) h.push(t.top()) ,t.pop();
}
} printf("%d %d\n",zz,aslen);
for(int i=;i<=aslen;i++)
{
printf("%d ",as[i]);
if(i%==)printf("\n");
}
if(aslen%!=)printf("\n");
}
return ;
}
poj3784
好像有个O(n)求第k大,但是没有例题口胡一下,就相当于splay的做法,分成左右两个区域,然后判断tot和k应该往哪边。
我觉得这东西应该没什么用,只问第k大的没多少吧,而且假如是在线问题的话肯定问很多次,每次O(n)太慢了2333
逆序对就没什么东西了(毕竟也是会cdq分治的)
但是n*m数码问题的有解性判定没见过,虽然简单就不口胡了。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int n,m;
int len,ans,a[],tt[];
void fenzi(int l,int r)
{
if(l==r)return ;
int mid=(l+r)/;
fenzi(l,mid);fenzi(mid+,r); int i=l,j=mid+,p=l;
while(i<=mid&&j<=r)
{
if(a[i]<=a[j])
{
ans+=j-(mid+);
tt[p++]=a[i++];
}
else
{
tt[p++]=a[j++];
}
}
while(i<=mid)
{
ans+=j-(mid+);
tt[p++]=a[i++];
}
while(j<=r)
{
tt[p++]=a[j++];
} for(int i=l;i<=r;i++)a[i]=tt[i];
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==&&m==)break;
int dis;len=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
len++;
scanf("%d",&a[len]);
if(a[len]==)dis=n-i,len--;
}
ans=;fenzi(,len);
if(m%==&&ans%==)printf("YES\n");
else if(m%==&&(ans+dis)%==)printf("YES\n");
else printf("NO\n");
}
return ;
}
poj2893
0x05 排序的更多相关文章
- 2019CSP-S初赛知识点汇总
0x00 基本算法 0x01 位运算 0x02 前缀和与差分 0x03 二分 0x04 倍增 0x05 排序 0x06 离散化 0x07 高精度 0x10 数据结构 0x11 栈和队列 0x12 链表 ...
- 算法竞赛进阶指南 0x00 基本算法
放在原来这个地方不太方便,影响阅读体验.为了读者能更好的刷题,另起一篇随笔. 0x00 基本算法 0x01 位运算 [题目][64位整数乘法] 知识点:快速幂思想的灵活运用 [题目][最短Hamilt ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- iOS可视化动态绘制八种排序过程
前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...
- JavaScript实现常用的排序算法
▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...
- [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html 目录 马桶排序(令人 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- 使用po模式读取豆瓣读书最受关注的书籍,取出标题、评分、评论、题材 按评分从小到大排序并输出到txt文件中
#coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...
随机推荐
- Redis(一)、Redis五种数据结构
Redis五种数据结构如下: 对redis来说,所有的key(键)都是字符串. 1.String 字符串类型 是redis中最基本的数据类型,一个key对应一个value. String类型是二进制安 ...
- cloudfoundry-----------service servicebroker 转载
目前,CloudFoundry已经集成了很多第三方的中间件服务,并且提供了用户添加自定义服务的接口.随着Cloud Foundry的发展,开发者势必会将更多的服务集成进Cloud Foundry,以供 ...
- C-C语言概述
1.数据+算法=程序. 2.C语言程序是由一个或多个函数组成的,函数是由语句组成的,语句是由关键字,标识符,运算符,数据组成的:语句可分为:声明语句,赋值语句,控制语句,函数语句,空语句. 3.#in ...
- 谷歌vimium配置
谷歌不得不说真的是一个非常好用的浏览器(之前用的浏览器真的好low),推荐一款非常极客的的插件vimium,让你使用彻底告别鼠标,瞬间感觉高大上... 默认配置: j: 向下细微滚动窗口. k:向上 ...
- [Offer收割]编程练习赛37
热门号码 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<vector> ...
- (转载)自定义CoordinatorLayout的Behavior(2):实现淘宝和QQ ToolBar透明渐变效果
自定义CoordinatorLayout的Behavior(2):实现淘宝和QQ ToolBar透明渐变效果 作者 小武站台 关注 2016.02.19 11:34 字数 1244 阅读 3885评论 ...
- 6) 十分钟学会android--Activity的生命周期之启动与销毁
当用户导航.退出和返回您的应用时,应用中的 Activity 实例将在其生命周期中转换不同状态. 例如,当您的Activity初次开始时,它将出现在系统前台并接收用户焦点. 在这个过程中,Androi ...
- 5 Python+Selenium的元素定位方法(xpath)
[环境] Python3.6+selenium3.0.2+FireFox50+win7 [定位方法] 1.方法:find_element_by_xpath('') 说明:xpath定位方法有相对路径和 ...
- 杭电1003 Max Sum 【连续子序列求最大和】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目意思: 即给出一串数据,求连续的子序列的最大和 解题思路: 因为我们很容易想到用一个max ...
- VFS(Virtual File System)
一.VFS作为内核子系统,为用户空间程序提供了文件系统相关的接口.所有实际文件系统依赖VFS共存,依靠VFS系统工作. 1.VFS提供通用文件系统接口:用户空间程序可以利用标准的UNIX文件系统调用, ...