1、给定一个$n*m$的矩阵,里面的数字是1到$n*m$的一个排列。一个$n*m$矩阵$A$对应一个$n*m$ 的01字符串,字符串的位置$i*m+j$为1当且仅当$A_{i,j}=i*m+j+1$。现在可以交换矩阵的两列或者两行。在任意多次操作后使得矩阵对应的字符串最大?

思路:从1到$n*m$,依次枚举。每次将当前数字填回正确位置。比较该次操作前后是否变大。不变大则不做本次操作。

#include <stdio.h>
#include <vector>
#include <string>
using namespace std; class GridSortMax
{
int a[55][55];
int b[55][55];
int N,M; void reset(int t) {
for(int i=0;i<N;++i) for(int j=0;j<M;++j) {
if(t==0) b[i][j]=a[i][j];
else a[i][j]=b[i][j];
}
} pair<int,int> get(int t) {
for(int i=0;i<N;++i) {
for(int j=0;j<M;++j) {
if(a[i][j]==t) return make_pair(i,j);
}
}
} void swapCol(int y1,int y2) {
for(int i=0;i<N;++i) swap(a[i][y1],a[i][y2]);
} void swapRow(int x1,int x2) {
for(int i=0;i<M;++i) swap(a[x1][i],a[x2][i]);
} string getAns() {
string s="";
for(int i=0;i<N;++i) for(int j=0;j<M;++j) {
if(a[i][j]==i*M+j+1) s+="1";
else s+="0";
}
return s;
} public:
string findMax(int n,int m,vector<int> grid)
{
for(int i=0;i<n;++i) {
for(int j=0;j<m;++j) {
a[i][j]=grid[i*m+j];
}
}
N=n;
M=m;
for(int i=1;i<=n*m;++i) {
pair<int,int> p=get(i);
int x=p.first;
int y=p.second;
int xx=(i-1)/m;
int yy=(i-1)%m;
if(x==xx&&y==yy) continue; string s0=getAns();
reset(0); if(x!=xx) swapRow(x,xx);
if(y!=yy) swapCol(y,yy); string s1=getAns();
if(s1<s0) reset(1); } return getAns(); }
};

  

2、(1)“()”是合法的字符串;(2)如果s是合法的,那么"(sss..ss)"是合法的,即1个或多个s外面加一层圆括号。给定字符串$S$以及 $k$,问$S$的所有合法子列的集合中(不重复),第$k$小的是哪个?$|S|<=150$,$k<=10^{9}$

思路:首先得到所有合法的字符串,然后分别枚举是不是$S$的子列。

#include <string.h>
#include <stdio.h>
#include <vector>
#include <string>
#include <set>
using namespace std; set<string> s; void dfs(string x) {
if(x.size()>150) return;
s.insert(x);
string p="";
for(int i=0;p.size()<=150;++i) {
p+=x;
dfs("("+p+")");
}
} class RepeatedStrings
{
public:
string findKth(string S,int k)
{
dfs("()");
for(string x:s) {
int p1=0,p2=0;
while(p1<(int)S.size()&&p2<(int)x.size()) {
if(S[p1]==x[p2]) ++p1,++p2;
else ++p1;
}
if(p2>=(int)x.size()) {
if(--k==0) return x;
}
}
return "";
}
};

  

topcoder srm 702 div1 -3的更多相关文章

  1. Topcoder SRM 643 Div1 250<peter_pan>

    Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...

  2. Topcoder Srm 726 Div1 Hard

    Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...

  3. topcoder srm 714 div1

    problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...

  4. topcoder srm 738 div1 FindThePerfectTriangle(枚举)

    Problem Statement      You are given the ints perimeter and area. Your task is to find a triangle wi ...

  5. Topcoder SRM 602 div1题解

    打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...

  6. 【topcoder SRM 702 DIV 2 250】TestTaking

    Problem Statement Recently, Alice had to take a test. The test consisted of a sequence of true/false ...

  7. Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串

    Problem Statement      The Happy Letter game is played as follows: At the beginning, several players ...

  8. Topcoder SRM 584 DIV1 600

    思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include& ...

  9. TopCoder SRM 605 DIV1

    604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是d ...

随机推荐

  1. QT 添加 lib库

    扒自网友文章: 一.添加第三方的头文件 首先,添加头文件  #include "ControlCAN.h" 然后,再将这个头文件放到工程的目录下 二.添加.lib文件 首先,将.l ...

  2. EL的隐含对象(三)【访问环境信息的隐含对象】

    EL中提供了6个访问环境信息的隐含对象.分别是: (1)param对象 param对象用于获取请求参数的值,应用在参数值只有一个的情况.在应用param对象时,返回的结果为字符串. 例:在JSP页面中 ...

  3. pandas常用函数

    1. df.head(n): 显示数据前n行,不指定n,df.head则会显示所有的行 2. df.columns.values获取所有列索引的名称 3. df.column_name: 直接获取列c ...

  4. sql语句,加引号和不加引号的区别

    今天碰到个问题,查询数据的时候,显示表不存在,在可视化窗口确实能看见.试着给表名加个引号,发现能成功查询数据了.上网查询原因如下: 1.oracle表和字段是有大小写的区别.oracle默认是大写,如 ...

  5. oracle中实现md5加密

    记得要实现md5加密,在oracle 11g 和 12c中是有不同的方式的,在12c中较为简单,记得直接有预定义的函数. 但是在11g中要实现就需要自己进行一些额外的处理,以下给出一个md5函数的实现 ...

  6. linux文本文件编辑命令

    1.cat命令 cat命令用于查看纯文本文件(内容较少的),格式为“cat [选项] [文件]”. Linux系统中有多个用于查看文本内容的命令,每个命令都有自己的特点,比如这个cat命令就是用于查看 ...

  7. WEBGL threejs 1

    首先感谢国内的这些研究者,先驱们~~~~~ 文章内容来自于webgl中文网,感谢~~~ -------------------------------------------------------- ...

  8. 参与.net开源项目开发

    EntityFramework6 https://github.com/aspnet/EntityFramework6 https://github.com/aspnet/EntityFramewor ...

  9. 从零开始学习cocoStudio(1)--cocoStudio是什么?

    一.cocoStudio是什么? CocoStudio是一套专业的永久免费的游戏开发工具集,帮助开发者快速创建游戏资源,将大部分繁琐的游戏开发工作使用编辑器来快速制作,CocoStudio包含了游戏开 ...

  10. Mysql Federated For Windows

    [1]windows环境下打开federated (1)关闭.命令:mysql> net stop mysql (2)添加federated字段.在my.ini文件中添加一个字段,注意位于[my ...