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. LeetCode141.环形链表

    给定一个链表,判断链表中是否有环. 进阶:你能否不使用额外空间解决此题? /** * Definition for singly-linked list. * class ListNode { * i ...

  2. 基于AOP注解实现业务功能的动态配置

    一.导入jar包 <dependency><!-- 4.引入AOP--> <groupId>org.springframework.boot</groupId ...

  3. Mockito/PowerMockito Straige Issues

    http://blog.csdn.net/xiaoyaoyulinger/article/details/52415494 http://breezylee.iteye.com/blog/208843 ...

  4. BFS 搜索 蓝桥杯模拟赛

    题目链接:https://nanti.jisuanke.com/t/36117 这个题目想不到用广搜来做,一直在想深搜. 广搜的思路呢,是把最外圈不是黑色(不是0)的数 的位置 i 和 j 进队,赋值 ...

  5. kalinux实现自适用全屏、与物理主机共享文件方法

    1.执行虚拟机>安装VMware Tools菜单命令,自动挂载光驱(一般是自动挂载的,如果没有自动挂载请自行百度linux如何手动挂载光驱) 2.打开vm光驱的vmtools复制此文件到桌面: ...

  6. 用python进行wifi密码生成

    随着无线网络的不断发展,几乎所有场合都会覆盖WIFI信号,无论是公共地点还是家庭之中.众所周知,目前WIFI普遍的认证方式为wpa2,这种认证方式安全性相当不错,但由于人们设置密码时的随意性和固有思维 ...

  7. Java函数接口实现函数组合及装饰器模式

    摘要: 通过求解 (sinx)^2 + (cosx)^2 = 1 的若干写法,逐步展示了如何从过程式的写法转变到函数式的写法,并说明了编写"[接受函数参数]并返回[能够接受函数参数的函数]的 ...

  8. 关于SqlCommand对象的2个方法:ExecuteNonQuery 方法和ExecuteScalar方法

    1.SqlCommand.ExecuteNonQuery 方法 对连接执行 Transact-SQL 语句并返回受影响的行数. 语法:public override int ExecuteNonQue ...

  9. 《nodejs开发指南》微博实例express4.x版

    之前一直执着于前端开发,最近几天,开始学起了nodejs.作为一名前端开发者,见到这样一门用javascript写的后台自然是很激动的.但是,后台毕竟不同于前端,在学习的过程中,还是会遇到不少问题. ...

  10. mybatis源码解析2---SqlSessionFactoryBuilder、SqlSessionFactory解析

    1.先看一个mybatis最简单的Demo String resource = "mybatis-config.xml"; //1.流形式读取mybatis配置文件 InputSt ...