MicroRNA Ranking(Tehran2016)

题意:给出m个n的全排列,求一个n的全排列,满足对于i<j,至少存在一半的全排列中,ai排在aj的前面,求字典序最小方案,或者是无解。

 

(1)首先我们对 vis[ a[i] ][ a[j] ]++ ,求出a[i] 对 a[j] 的贡献。对vis[i][j] 和 vis[j][i]是否大于 一半 ,若大于就建立一条边,最后跑一边拓扑排序

(2)比赛的时候,将大于j 的数插入 s[j] 的集合中,然后对每一位进行筛选,若当前位置的数没有比他大的,则当前位置的数就为该数,然后将这个数从s[i] (i = 1 - > n)中删除这个数

依次循环,算的时间复杂度是0(k*n*n + n*n*log(n)),没想到超时了

 

 

比赛结束后,改成用树状数组维护,AC  ....  没想到STL 时间复杂度真的是高

 

拓扑排序 AC code

#include <bits/stdc++.h>using namespace std;const int N = 1e3 + 10;int vis[N][N],a[N],in[N],ans[N],n;vector<int>edge[N];int topu()
{int cont=0;priority_queue<int,vector<int>,greater<int> >Q;for(int i=1; i<=n; i++)if(in[i]==0)Q.push(i);while(!Q.empty()){int u=Q.top();Q.pop();cont++;ans[cont] = u;for(int i = 0 ;i < edge[u].size(); i++){int v = edge[u][i];if(--in[v]==0)Q.push(v);}}if(cont<n)return false;return true;
}
int main()
{int m;while(~scanf("%d%d",&n,&m)&&n&&m){memset(vis,0,sizeof(vis));memset(in,0,sizeof(in));for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++)scanf("%d",&a[j]);for(int j = 1;j <= n;j++)for(int k = j+1;k <= n;k++)vis[a[j]][a[k]]++;}for(int i = 1; i <= n;i++)for(int j = i + 1;j <= n;j++){if(vis[i][j] > vis[j][i])   edge[i].push_back(j),in[j]++;else if(vis[i][j] < vis[j][i])  edge[j].push_back(i),in[i]++;}if(topu()){for(int i = 1;i <= n;i++)printf("%d%c",ans[i],i == n?'\n':' ');}elseputs("No solution");for(int i = 1;i <= n;i++)edge[i].clear();}return 0;
}

 

set超时代码:

#include <bits/stdc++.h>using namespace std;const int N = 1e3 + 10;int vis[N][N],a[N],vised[N];
set<int>s[N];
int main()
{int n,m;while(~scanf("%d%d",&n,&m)&&n&&m){for (int i=1;i<=n;i++)s[i].clear();memset(vis,0,sizeof(vis));memset(vised,0,sizeof(vised));for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++)scanf("%d",&a[j]);for(int j = 1;j <= n;j++)for(int k = j+1;k <= n;k++)vis[a[j]][a[k]]++;}for(int i = 1; i <= n;i++)for(int j = i + 1;j <= n;j++){if(vis[i][j] > m/2) vis[i][j] = 1,vis[j][i] = 0,s[j].insert(i);else if(vis[j][i] > m/2) vis[j][i] = 1,vis[i][j] = 0,s[i].insert(j);else    vis[i][j] = vis[j][i] = 0;}int ans[N],tot = 1;while(tot <= n){int flag = 0,now = 0;for(int i = 1;i <= n;i++){if(!vised[i]){if(s[i].empty()){flag = 1;now = i;break;}}}if(!flag)   break;ans[tot] = now;vised[now] = 1;for(int i = 1;i <= n;i++)if(s[i].find(now) != s[i].end())s[i].erase(s[i].find(now));tot++;}if(tot <= n)    puts("No solution");else{for(int i = 1;i <= n;i++)printf("%d%c",ans[i],i == n?'\n':' ');}}return 0;
}

 

树状数组AC code:

#include <bits/stdc++.h>
#define IT set<int>::iteratorusing namespace std;const int N = 1e3 + 10;int vis[N][N],a[N],vised[N],c[N][N],n;int lowbit(int x){  return x&(-x);}
void update(int pos,int x,int y)
{while(x <= n){c[pos][x] += y;x += lowbit(x);}
}int query(int pos,int x)
{int ans = 0;while(x){ans += c[pos][x];x -= lowbit(x);}return ans;
}
int main()
{int m;while(~scanf("%d%d",&n,&m)&&n&&m){memset(c,0,sizeof(c));memset(vis,0,sizeof(vis));memset(vised,0,sizeof(vised));for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++)scanf("%d",&a[j]);for(int j = 1;j <= n;j++)for(int k = j+1;k <= n;k++)vis[a[j]][a[k]]++;}for(int i = 1; i <= n;i++)for(int j = i + 1;j <= n;j++){if(vis[i][j] > vis[j][i])   vis[i][j] = 1,vis[j][i] = 0,update(j,i,1);else if(vis[j][i] > vis[i][j]) vis[j][i] = 1,vis[i][j] = 0,update(i,j,1);else vis[i][j] = vis[j][i] = 0;}int ans[N],tot = 1;while(tot <= n){int flag = 0,now = 0;for(int i = 1;i <= n;i++){if(!vised[i]){if(!query(i,n)){flag = 1;now = i;break;}}}if(!flag)   break;ans[tot] = now;vised[now] = 1;for(int i = 1;i <= n;i++){if(vis[now][i])update(i,now,-1);}tot++;}if(tot <= n)    puts("No solution");else{for(int i = 1;i <= n;i++)printf("%d%c",ans[i],i == n?'\n':' ');}}return 0;
}

 

转载于:https://www.cnblogs.com/lemon-jade/p/9600802.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux gpt引导分区,linux 引导gpt分区windows及clover

原因&#xff1a;电脑采用gpt分区&#xff0c;安装了win10linux(debian)mac 10.11(El capitan),使用clover做引导器时&#xff0c;可以引导linux和mac,但通过bootmgfw.efi引导win10时无限转圈,不能正常启动win10。所以考虑用linux的grubx引导器。1、引导Clocer查看clover所在EF…

查看表状态及索引碎片语句

语句&#xff1a;DBCC SHOWCONTIG (SrMissedCalls) WITH ALL_INDEXES&#xff1b; 其中‘SrMissedCalls’是表名字。 执行之后展示内容&#xff1a; 转载于:https://www.cnblogs.com/shendaxian/p/9604826.html

visualvm远程jvm_VisualVM:通过SSH监视远程JVM(是否为JMX)

visualvm远程jvmVisualVM是用于监视JVM&#xff08;5.0&#xff09;的有关内存使用&#xff0c;线程&#xff0c;GC&#xff0c;MBeans等的出色工具。让我们看看如何通过SSH使用它来监视&#xff08;甚至使用JMX进行配置&#xff09;使用JMX或不使用JMX的远程JVM。它。 这篇文章…

如何切换pip的源

参考别人的帖子https://blog.csdn.net/chenghuikai/article/details/55258957 转载于:https://www.cnblogs.com/PoeticalJustice/p/9609659.html

shp文件的读取

转载自&#xff1a;http://blog.csdn.net/gisfarmer/article/details/3861554做GIS开发的朋友可能对shp并不陌生&#xff0c;但是看到CSDN网友不断提问关于shp文件的一些问题&#xff0c;利用闲暇我对shp文件的一些知识加以总结&#xff0c;共享CSDN网友。首先了解一下shp文件的…

Java 8:CompletableFuture与并行流

这篇文章展示了Java 8的CompletableFuture在执行异步计算时如何与并行流进行比较。 我们将使用以下类对长时间运行的任务进行建模&#xff1a; class MyTask {private final int duration;public MyTask(int duration) {this.duration duration;}public int calculate() {Sy…

linux使用gpio开一个线程,LINUX的gpio_request_one作用

一直习惯使用gpio_request来申请一个GPIO&#xff0c;然后用gpio_direction_input、gpio_direction_output等函数来配置对应的GPIO&#xff0c;用gpio_free来释放申请。后来看到别人也会用gpio_request_one来申请和配置一个GPIO&#xff0c;然后就去看看看这个接口的实现&#…

Python制作回合制手游外挂简单教程(下)

引入&#xff1a; 接着上篇的博文&#xff0c;今天我们讲如何实现助人为乐 前期准备&#xff1a; 如何获取图片中指定文字的坐标&#xff1f; 我的思路是截取一个小区域&#xff0c;再根据小区域左上角的坐标获取中央坐标 例如&#xff1a; 获取坐上角的x和y坐标&#xff0c;测…

XSHELL下直接下载文件到本地(Windows)

转载自&#xff1a;http://www.cnblogs.com/davytitan/p/3966606.html xshell很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz 首先你的Ubuntu需要安装rz.sz(如果没有安装请执行以下命令,安装完的请跳过.其它版本linux请自行安装相应软…

linux操作系统2试题,RedHat Linux 9.0 操作系统测试题2

一、填空题(每空1分&#xff0c;共14分)1.任何Linux系统都至少需要两类分区&#xff1a;根分区和交换分区。2.CD-ROM标准的文件系统是iso9660。3.使用vi编辑器可以创建文本文件&#xff0c;在输入文件内容之前需要先按INSERT键进入插入模式&#xff0c;在保存之前需下先使用ESC…

HazelCast的Spring-Boot和Cache抽象

以前&#xff0c;我们是使用spring提供的默认Cache Manager来开始Spring Cache抽象的。 尽管这种方法可能适合我们对简单应用程序的需求&#xff0c;但是在出现复杂问题的情况下&#xff0c;我们需要使用具有更多功能的其他工具。 Hazelcast就是其中之一。 当涉及到基于JVM的应…

Ubuntu18.04 安装搜狗输入法后无法启动的问题

ibus 改选成fcitx后搜狗输入法照样没出来。 这里需要im-config 没有的话需要安装&#xff1a; sudo apt install im-config 然后在Terminal中执行 im-config 根据提示选择fcitx转载于:https://www.cnblogs.com/feipeng8848/p/9609877.html

linux华为路由器模拟器,华为路由器模拟器与实验内容.doc

华为路由器模拟器与实验内容华为的路由器模拟器及实验内容??2009-12-21 20:27:53|??分类&#xff1a; HYPERLINK "/ah..zhangrui/blog/" \l "m0&t1&cfks_080074086080086074092094074070087095083070092086084" \o "默认分类" 默认分…

_WIN32_WCE有什么用

转载自&#xff1a;http://blog.csdn.net/thanklife/article/details/21477561 _WIN32_WCE有什么用,我这里找了一些人的回应。由于目前我手头的源码有限&#xff0c;还没有找到定义之处。先这样保留着这个问题吧。以下是一些别人给的认识。 经常看到 #ifndef _WIN32_WCE 这是什…

zk ui_高级ZK:异步UI更新和后台处理–第1部分

zk ui异步UI更新非常有用&#xff0c;因为它们通常可以提高响应性&#xff0c;可用性和用户界面的总体感觉。 我将在这里重点介绍ZK框架&#xff0c;但是通常&#xff0c;相同的原理也适用于桌面UI&#xff08;Swing&#xff0c;SWT&#xff09;。 长时间运行的处理 有时您可能…

BZOJ 3223: Tyvj 1729 文艺平衡树-Splay树(区间翻转)模板题

3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6881 Solved: 4213[Submit][Status][Discuss]Description 您需要写一种数据结构&#xff08;可参考题目标题&#xff09;&#xff0c;来维护一个有序数列&#xff0c;其中需要提供以下操作&#…

在Spring中了解事务注释

1.简介 Spring为程序性和声明性事务提供支持。 1.1程序化交易 对于程序性事务&#xff0c;需要显式编写事务管理代码&#xff0c;以便在一切成功后提交&#xff0c;并在出现问题时回滚。 在这种情况下&#xff0c;事务管理代码与业务逻辑紧密绑定。 1.2声明式交易 声明式事…

GIS开源库shapeLib的使用方法

转自&#xff1a;http://www.cnblogs.com/liongis/archive/2012/10/23/2736015.html 近期研究了一下GIS开源库shapeLib读写ArcGIS数据的API函数&#xff0c;先整理一下&#xff0c;将各个API的用法介绍一下。 分为两个模块&#xff0c;shape API和DBF API&#xff0c;前者的读取…

linux 升级 iphone,Linux 5.13 更新有望增加对苹果 M1 处理器的支持

IT之家 4 月 10 日消息 预计 Linux 5.13 将初步支持苹果 Silicon M1 处理器&#xff0c;不过可能还需要几年时间才能完全支持。虽然已经在苹果 Silicon M1 上运行&#xff0c;但这是通过一系列的补丁&#xff0c;单纯是为了 Linux 能够在 M1 设备上启动而已&#xff0c;而现在 …

201771010118马昕璐

第一部分 理论知识的学习 第三章Java基本程序设计结构 1 基本知识&#xff1a; &#xff08;1&#xff09;标识符&#xff1a;标识符由字母、下划线、美元符号和数字组成&#xff0c;且第一个符号不能为数字。Hello、$1234、程序名、www_123都是合法标识符。 标识符可用作类名…