bnu A Matrix 北京邀请赛A题
A Matrix
int f[][];
int p[];
int n;
void insert(int r, int x)
{
for (int i=1; 1; i++)
if (f[r][i]==0)
{
f[r][i]=x;
return ;
}
else if (f[r][i]>x)
{
int tmp=f[r][i];
f[r][i]=x;
insert(r+1, tmp);
return ;
}
}
void Permutation2Matrix()
{
for (int i=1; i<=n; i++)
insert(1, p[i]);
}
Input
- First line contains 2 integers N (1 ≤ N ≤ 105), M (1 ≤ M ≤ N) indicating length of the permutation and number of rows which do not contains 0 in the matrix.
- Then M lines, the ith line represent the ith row in the matrix.
- The first integer in each line is Pi, indicating the number of non-zero elements in this row. Then Pi integers, indicating those elements.
Output
Sample Input
2
3 2
2 1 2
1 3
2 1
2 2 1
Sample Output
Case #1: 1 3 2
Case #2: No solution
Source
我们发现1是没有和谁连接的,没有关系,我们想要使反转最大,那么越小的数字出现在前面,越好,贪心的思想。#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<vector>
using namespace std; vector<int>Q[];
vector<int>Hash[];
int hxl[],len; void dfs(int x,int y,int dep)
{
if(x>dep)return;
if(Hash[x][y]==-)
{
Hash[x][y]=-;
hxl[++len]=Q[x][y];
return;
}
dfs(x+,Hash[x][y],dep);
hxl[++len]=Q[x][y];
Hash[x][y]=-;
}
void solve(int n,int m)
{
for(int i=m;i>=;i--)
{
int k=Hash[i][];
int s=Hash[i-][];
for(int j=k;j>=;j--)
{
for(;s>=;s--)
if(Q[i][j]>Q[i-][s]){
Hash[i-][s]=j;
s--;
break;
}
}
}
for(int i=;i<m;i++)
{
int num=;
for(int j=;j<=Hash[i][];j++)
if(Hash[i][j]!=-)num++;
if(num!=Hash[i+][]){
printf(" No solution\n");
return;
}
}
len = ;
for(int i=;i<=m;i++)
{
for(int j=;j<=Q[i][];j++)
{
if(Hash[i][j]==-)hxl[++len]=Q[i][j];
else if(Hash[i][j]==-)continue;
else dfs(i,j,m);
}
}
for(int i=;i<=len;i++)
printf(" %d",hxl[i]);
printf("\n");
}
int main()
{
int T,n,m,x,y;
scanf("%d",&T);
for(int t=;t<=T;t++)
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
Q[i].clear();
Hash[i].clear();
}
bool flag=false;
for(int i=;i<=m;i++)
{
scanf("%d",&x);
Q[i].push_back(x);
Hash[i].push_back(x);
for(int j=;j<=x;j++)
{
scanf("%d",&y);
Q[i].push_back(y);
Hash[i].push_back(-);
if(j>&&Q[i][j]<=Q[i][j-]) flag=true;
}
if(i>&&Q[i][]>Q[i-][])flag=true;
}
printf("Case #%d:",t);
if(flag==true)printf(" No solution\n");
else{
solve(n,m);
}
}
return ;
}
bnu A Matrix 北京邀请赛A题的更多相关文章
- BNUOJ 34985 Elegant String 2014北京邀请赛E题 矩阵快速幂
题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 题目大意:问n长度的串用0~k的数字去填,有多少个串保证任意子串中不包含0~k的 ...
- 2014 ACM/ICPC 北京邀请赛 部分 题解
题目链接:http://acm.bnu.edu.cn/bnuoj/problem.php?search=2014+ACM-ICPC+Beijing+Invitational+Programming+C ...
- hihocoder 1084 扩展KMP && 2014 北京邀请赛 Justice String
hihocoder 1084 : http://hihocoder.com/problemset/problem/1084 北京邀请赛 Just String http://www.bnuoj.co ...
- 2013长沙网络赛H题Hypersphere (蛋疼的题目 神似邀请赛A题)
Hypersphere Time Limit: 1 Second Memory Limit: 32768 KB In the world of k-dimension, there's a ...
- 2013 ACM/ICPC南京邀请赛B题(求割点扩展)
题目链接:http://icpc.njust.edu.cn/Contest/194/Problem/B B - TWO NODES 时间限制: 10000 MS 内存限制: 65535 KB 问题描述 ...
- XTU 1264 - Partial Sum - [2017湘潭邀请赛E题(江苏省赛)]
2017江苏省赛的E题,当时在场上看错了题目没做出来,现在补一下…… 题目链接:http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id ...
- bnu 29378 Adidas vs Adivon 基础题
Adidas vs Adivon Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java ...
- 2013 南京邀请赛 K题 yet another end of the world
/** 大意:给定一组x[],y[],z[] 确定有没有两个不同的x[i], x[j] 看是否存在一个ID使得 y[i]<=ID%x[i]<=z[i] y[j]<=ID%x[j]&l ...
- 2014 北京邀请赛ABDHJ题解
A. A Matrix 点击打开链接 构造,结论是从第一行開始往下产生一条曲线,使得这条区间最长且从上到下递减, #include <cstdio> #include <cstrin ...
随机推荐
- 【你吐吧c#每日学习】10.29 C#字符串类型&Common operators
backslash \反斜杠 escape sequence 转义字符 double quote 双引号 new line 新行字符 Bell アラート Console.WriteLine(" ...
- linux第10天 msg消息队列
cat /proc/sys/kernel/msgmax最大消息长度限制 cat /proc/sys/kernel/msgmnb消息队列总的字节数 cat /proc/sys/kernel/msgmni ...
- 三台CentOS 5 Linux LVS 的DR 模式http负载均衡安装步骤
Linux负载均衡软件LVS(概念篇) 一. LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是ww ...
- 弱类型变量原理探究(转载 http://www.csdn.net/article/2014-09-15/2821685-exploring-of-the-php)
N首页> 云计算 [问底]王帅:深入PHP内核(一)——弱类型变量原理探究 发表于2014-09-19 09:00| 13055次阅读| 来源CSDN| 36 条评论| 作者王帅 问底PHP王帅 ...
- Android 封装Dialog
package com.example.myandroid01; import android.support.v7.app.ActionBarActivity; import android.os. ...
- 常见http状态
200(成功):服务器已成功处理了请求.通常,这表示服务器提供了请求的网页.如果是对您的 robots.txt 文件显示此状态码,则表示 Googlebot 已成功检索到该文件. 304(未修改):自 ...
- java socket 发送文件
客户端: package tt; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStrea ...
- 夺命雷公狗---node.js---5net模块玩telnet通信(中)
我们理论知识太多还不如实战,我们来写一个可以通过telnet腾讯的小玩意玩玩: var net = require('net'); var ChatServer = net.createServer( ...
- OpenGL拾取注意事项
GLFrame框架本身不支持拾取,需要自己实现.以下代码是实现拾取功能的注意事项: void Test::doSelection(int xPos, int yPos) { GLfloat aspec ...
- Linux/Unix笔记本
Linux介绍 Linux入门——个人感想 Google怎么用linux 初入Linux Windows XP硬盘安装Ubuntu 12.04双系统图文详解 实例讲解虚拟机3种网络模式(桥接.nat. ...