hdu5386(2015多校8)--Cover

2024-08-25 00:38
文章标签 2015 多校 cover hdu5386

本文主要是介绍hdu5386(2015多校8)--Cover,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:点击打开链接

题目大意:给出一个n*n的矩阵的初始值,和最终的值,现在有m个操作 L i j ,将第i列的值重置为j,H i j,将第i行的值重置为j。问m个操作应该怎么执行,可以完成矩阵的变化。

从最终的值向前找寻方案,每次找行和列中剩余的颜色全部相同的,看是否存在没被使用的操作可以完成它,如果有就记录下来,那么最终按照记录的逆序输出,就是可以完成变化的序列啦

#include <cstdio>
#include <cstring>
#include <stack>
#include <algorithm>
using namespace std ;
struct node{char s[5] ;int x , y ;
}p[510] ;
int Map[110][110] ;
int vis[510] , n , m ;
stack <int> sta ;
void solve(int k) {int i ;if( p[k].s[0] == 'L' ) {for(i = 1 ; i <= n ; i++) {if( Map[i][ p[k].x ] == 0 ) continue ;if( Map[i][ p[k].x ] != p[k].y ) break ;}if( i > n ) {sta.push(k) ;vis[k] = 1 ;for(i = 1 ; i <= n ; i++)Map[i][ p[k].x ] = 0 ;}}else {for(i = 1 ; i <= n ; i++) {if( Map[ p[k].x ][i] == 0 ) continue ;if( Map[ p[k].x ][i] != p[k].y ) break ;}if( i > n ) {sta.push(k) ;vis[k] = 1 ;for(i = 1 ; i <= n ; i++)Map[ p[k].x ][i] = 0 ;}}
}
int main() {int t , i , j  ;scanf("%d", &t) ;while( t-- ) {scanf("%d %d", &n, &m) ;for(i = 1 ; i <= n ; i++)for(j = 1 ; j <= n ;j++)scanf("%d", &Map[i][j]) ;for(i = 1 ; i <= n ; i++)for(j = 1 ; j <= n ;j++)scanf("%d", &Map[i][j]) ;for(i = 0 ; i < m ; i++)scanf("%s %d %d", p[i].s, &p[i].x, &p[i].y) ;memset(vis,0,sizeof(vis)) ;while( !sta.empty() ) sta.pop() ;for(i = 0 ; i < m ; i++) {for(j = 0 ; j < m ; j++) {if( vis[j] ) continue ;solve(j) ;}}for(i = 1 ; i < m ; i++) {printf("%d ", sta.top()+1 ) ;sta.pop() ;}printf("%d\n", sta.top()+1 ) ;sta.pop() ;}return 0 ;
}


这篇关于hdu5386(2015多校8)--Cover的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104068

相关文章

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl

CF Bayan 2015 Contest Warm Up A.(模拟+预处理)

A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/problem/A The fi

2015年校赛总结

题目名为“校赛总结”,其实更想换成“Rainbow为什么五题滚粗?!”。作为今年校赛大二没拆的两个队伍之一,结果打成这样,没脸见人了,总结起来就是我认为自己今天SB了。主要有以下几点: 1.我今天状态的确不好,最后卡的那道B题跟去年在农大校赛上遇见的那题类似,在最后那段时间我已经有思路了,可是由于当时不敢写。等到最后15分钟才开始敲,加上我用很麻烦的Dijstra那种方法,调试起来好多细节要处理

百度之星 2015 复赛 1001 (数长方形)

数长方形    Accepts: 595    Submissions: 1225  Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 小度熊喜欢玩木棒。一天他在玩木棒的时候,发现一些木棒会形成长方形

百度之星 2015 初赛(1) 1002 找连续数

找连续数      Accepts: 401      Submissions: 1911  Time Limit: 2000/1000 MS (Java/Others)      Memory Limit: 32768/32768 K (Java/Others) Problem Description 小度熊拿到了一个无序的数组,对于这个数组,小度熊想知道是

2015多校联合训练第三场Work(hdu5326)

题意: a是b的上司,b是c的上司,则a是c的上司,问构成一个树种,有多人是 k个人的上司 思路: 先找出root,然后dfs一下就行 #include <bits/stdc++.h>#define LL long longusing namespace std;const int MAXN = 1e6;int f[105];int n, k;int mp[101][101];

2015年多校联合训练第三场RGCDQ(hdu5317)

题意: f(i)代表i数中有的素数的种数,给出区间[l,r],求区间内max(gcd(f(i))), 由于i最大是1e6,2*3*5*7*11*13*17>1e6,故最多不超过7种素数, 先打表打出1e6内的素数种数表,然后用sum[i][j]代表1-i个数中,还有j个素数的个数,最后用sum[r][j] - sum[l-1][j]求出区间内含有j个素数的数的个数,暴力找出1,2,3,4,5

2015多校联合训练第一场Tricks Device(hdu5294)

题意:给一个无向图,给起点s,终点t,求最少拆掉几条边使得s到不了t,最多拆几条边使得s能到t 思路: 先跑一边最短路,记录最短路中最短的边数,总边数-最短边数就是第二个答案 第一个答案就是在最短路里面求最小割,也就是求最大流,然后根据最短路在建个新图,权为1,跑一边网络流 模板题,以后就用这套模板了 #include <iostream>#include <cstdio>#incl

2015多校联合训练第一场Assignment(hdu5289)三种解法

题目大意:给出一个数列,问其中存在多少连续子序列,子序列的最大值-最小值< k 这题有三种解法: 1:单调队列,时间复杂度O(n) 2:RMQ+二分,时间复杂度O(nlogn) 3:RMQ+贪心,时间复杂度O(nlogn) 一:RMQ+二分 RMQ维护最大值,最小值,枚举左端点i,二分找出最远的符合的右端点j,答案就是ans += j - i+1;(手推一下就知道) 比如1 2 3

2015年多校联合训练第一场OO’s Sequence(hdu5288)

题意:给定一个长度为n的序列,规定f(l,r)是对于l,r范围内的某个数字a[i],都不能找到一个对应的j使得a[i]%a[j]=0,那么l,r内有多少个i,f(l,r)就是几。问所有f(l,r)的总和是多少。 公式中给出的区间,也就是所有存在的区间。 思路:直接枚举每一个数字,对于这个数字,如果这个数字是合法的i,那么向左能扩展的最大长度是多少,向右能扩展的最大长度是多少,那么i为合法的情况