题目描述

给出一个n * m的矩阵。让你从中发现一个最大的正方形。使得这样子的正方形在矩阵中出现了至少两次。输出最大正方形的边长。

输入描述:

第一行两个整数n, m代表矩阵的长和宽;
接下来n行,每行m个字符(小写字母),表示矩阵;

输出描述:

输出一个整数表示满足条件的最大正方形的边长。
示例1

输入

5 10
ljkfghdfas
isdfjksiye
pgljkijlgp
eyisdafdsi
lnpglkfkjl

输出

3

备注:

对于30%的数据,n,m≤100;
对于100%的数据,n,m≤500;

数据还是挺好的,不二分超时,用set超内存。得必须自己写字符串二维hash;

此题是原题,URAL

分析:他一定是满足二分性质的~~~

二维字符串hash,没听说过,其实和子矩阵和类似,就是用了一种数学方法,可以通过相加减得到一个子矩阵的hash值。

先一行一行hash,然后是列,组合起来。

逻辑还是很好写的,可以当做一个小板子。

#include <bits/stdc++.h>

using namespace std;

typedef unsigned long long ull;
const int N = + ,INF = 0x3f3f3f3f;
const int seed = ,Seed = ; char ori[N][N];
ull hash1[N][N],seed_pow[N]; ///row
ull hash2[N][N],Seed_pow[N]; ///col
ull a[N*N];
int n,m; bool check(int k) {
int tot = ; for(int i = k; i <= n; i++)
{
for(int j = k ; j <= m; j++)
{
ull tmp = hash2[i][j] - hash2[i-k][j]*Seed_pow[k] - hash2[i][j-k]*seed_pow[k] + hash2[i-k][j-k]*Seed_pow[k]*seed_pow[k];
a[++tot] = tmp;
}
} sort(a+,a++tot);
for(int i = ; i <= tot - ; i++)
if(a[i]==a[i+]) return true;
return false; } int main()
{
freopen("in.txt","r",stdin);
seed_pow[] = Seed_pow[] = ;
for(int i = ; i < N; i++)
{
seed_pow[i] = seed_pow[i-]*seed;
Seed_pow[i] = Seed_pow[i-]*Seed;
} scanf("%d%d",&n,&m); for(int i = ; i <= n; i++) scanf("%s",ori[i]+); for(int i = ; i <= n; i++)
for(int j = ; j <= m; j++)
hash1[i][j] = hash1[i][j-]*seed + ori[i][j]; for(int i = ; i <= m; i++)
for(int j = ; j <= n; j++)
hash2[j][i] = hash2[j-][i]*Seed + hash1[j][i]; int ans = ;
int l = ,r = min(n,m); while(l<=r) {
int mid = (l + r) >> ;
if(check(mid)) ans = mid,l = mid + ;
else r = mid - ;
}
printf("%d\n",ans); return ;
}
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

shy有一颗树,树有n个结点。有k种不同颜色的染料给树染色。一个染色方案是合法的,当且仅当对于所有相同颜色的点对(x,y),x到y的路径上的所有点的颜色都要与x和y相同。请统计方案数。

输入描述:

第一行两个整数n,k代表点数和颜色数;
接下来n-1行,每行两个整数x,y表示x与y之间存在一条边;

输出描述:

输出一个整数表示方案数(mod 1e9+7)。
示例1

输入

4 3
1 2
2 3
2 4

输出

39

备注:

对于30%的数据,n≤10, k≤3;
对于100%的数据,n,k≤300。

顿时对牛客上的题目好感+1。

此题看上去是一个染色,其实任意两个相同颜色的点对,之间都的一个颜色,那就是一个联通分量全是一个颜色。

树,就可以看做是一个点集合,挑哪些点染同一种颜色。显然是DP做法。

d[i][j] :前 i 个点,染 j 种颜色的方案数。

d[i][j] = d[i-1][j] + d[i-1][j-1]*(k+1-j);

#include <bits/stdc++.h>

using namespace std;

const int mod = 1e9+;

long long d[][];

int main()
{
int n,k;
scanf("%d%d",&n,&k); for(int i = ; i < n-; i++) {
int x,y;
scanf("%d%d",&x,&y);
} memset(d,,sizeof(d));
d[][] = ; for(int i = ; i <= n; i++) {
for(int j = ; j <= k; j++) {
d[i][j] = (d[i-][j] + d[i-][j-]*(k+-j))%mod;
}
} long long ans = ;
for(int j = ; j <= k; j++)
ans = (ans + d[n][j])%mod;
cout<<ans<<endl; return ;
}

Wannafly模拟赛的更多相关文章

  1. Wannafly模拟赛5 A Split 暴力 二分加速

    你有一个大小为

  2. Wannafly模拟赛 A.矩阵(二分答案+hash)

    矩阵 时间限制:1秒 空间限制:131072K 题目描述 给出一个n * m的矩阵.让你从中发现一个最大的正方形.使得这样子的正方形在矩阵中出现了至少两次.输出最大正方形的边长. 输入描述: 第一行两 ...

  3. Wannafly模拟赛3

    喜欢想飞啊,毕竟这里的题目还都算挺好的中文题,不过做英文题久了还是感觉英文题更好理解一点 反蝴蝶效应 时间限制:1秒 空间限制:65536K 题目描述 一只南美洲亚马孙河流域热带雨林中的蝴蝶,偶尔扇动 ...

  4. Wannafly模拟赛2

    Contest 时间限制:1秒 空间限制:131072K 题目描述 n支队伍一共参加了三场比赛. 一支队伍x认为自己比另一支队伍y强当且仅当x在至少一场比赛中比y的排名高. 求有多少组(x,y),使得 ...

  5. 牛客网Wannafly模拟赛

    A矩阵 时间限制:1秒 空间限制:131072K 题目描述 给出一个n * m的矩阵.让你从中发现一个最大的正方形.使得这样子的正方形在矩阵中出现了至少两次.输出最大正方形的边长. 输入描述: 第一行 ...

  6. Wannafly模拟赛2 B river(拉格朗日乘数法)

    题目 https://www.nowcoder.com/acm/contest/4/B题意 有n条南北流向的河并列排着,水流速度是v,现在你需要从西岸游到东岸,总共T个时间,你的游泳速度是u,问东岸的 ...

  7. Wannafly模拟赛2 C alliances(dfs序+二分)

    题目 https://www.nowcoder.com/acm/contest/4/C 题意 由n个点组成一个树,有m个帮派,每个帮派由一些个点组成,这些点以及它们两两路径上的所有点都属于该帮派的管辖 ...

  8. Wannafly交流赛1_B_硬币【数学】

    Wannafly交流赛1_B_硬币[数学] 链接:https://www.nowcoder.com/acm/contest/69/B 来源:牛客网 题目描述 蜥蜴的生日快到了,就在这个月底! 今年,蜥 ...

  9. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

随机推荐

  1. sql常用格式化函数及字符串函数

    一.常用格式化函数 1.日期转字符串 select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS') YYYY:年份 MM:月份号(01-12) ...

  2. html5使用local storage存储的数据在本地是以何种形式保存的

    html5使用local storage存储的数据是如何保存在本地的?(我使用的是chrome浏览器,chrom浏览器是用sqlite来保存本地数据的) Html5 的local storage 是通 ...

  3. API-Framework 前后端分离

  4. 下载Dubbo源码后的编译安装启动

    1:安装jdk,maven       配制环境变量: 2:安装zookeeper      配制zookeeper环境变量 3:把dubbo源码编译成war包 启动cmd黑窗口  ,进入  源码文件 ...

  5. nyoj 61——传纸条(一)——————【双线dp】

    传纸条(一) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...

  6. JavaScript对象 创建对象(一)

    创建对象  --以下内容来自JavaScript高级程序设计 工厂模式 用函数来封装以特定接口创建对象的细节. function createPerson(name, age, job){ var o ...

  7. 拼凑的宿主-host

    开发两年之久,竟然不知道host这个词是什么意思.前些天有幸遇到了,就跟别人请教了.今天理絮一下.总比不知道强吧. 白话来说宿主就是一些框架运行机制运行时需要依赖的平台. 例如web开发常用的IIS, ...

  8. javascript对HTML字符转义与反转义

    1.背景:在项目中,经常遇到一些字符需要进行转义后才能显示到界面上,如“&”,在界面中显示的是“&”,在html中书写“&”,显示在界面的中的依然是“&”. 这时候,就 ...

  9. 2729:Blah数集

    2729:Blah数集 查看 提交 统计 提问 总时间限制: 3000ms 内存限制: 65536kB 描述 大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah,对于以a为基的集合Ba定义如下: ...

  10. 对HTML的大致了解

    HTML的全称是Hyper Text Markup Language(超文本标记语言),是一种标记语言.其中,HTML文档一个重要的.广泛使用的标准HTML4.01是在1999年12月24日由W3C组 ...