CF1511E Colorings and Dominoes
考虑计数拆开贡献。
因为在一个方案中一个格子最多只会贡献一次,那么不妨反过来求这个格子贡献了多少次。
然后发现,行列独立,那么我们单独计算红蓝色,即可。
一个偶数块贡献当且仅当前面也是偶数块。
然后显然其他不在同一行/同一列的块就直接随便乱取就行了。
#include<iostream>
#include<cstdio>
#include<vector>
#define N 300005
#define mod 998244353
#define ll long long
int n,m;
char a[N];
int sum = 0;
std::vector<int>v[N];
int f[N];
inline ll pow(ll a,ll b){
ll ans = 1;
while(b){
if(b & 1)ans = ans * a % mod;
a = a * a % mod;
b >>= 1;
}
return ans;
}
ll ans = 0;
int main(){
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;++i){
scanf("%s",a + 1);
for(int j = 1;j <= m;++j)
sum += (a[j] == 'o'),v[i].push_back(a[j] == 'o');
}
f[2] = f[3] = 1;
for(int i = 4;i <= sum;++i)
f[i] = (pow(2,i - 3) + f[i - 2]) % mod;
for(int i = 2;i <= sum;++i)
f[i] = f[i] * pow(2,sum - i) % mod;
int now = 0;//当前段长度
for(int i = 1;i <= n;++i,now = 0)
for(int j = 0;j < m;++j){
now = now * v[i][j] + v[i][j];
ans = (ans + f[now]) % mod;
}
now = 0;
for(int j = 0;j < m;++j,now = 0)
for(int i = 1;i <= n;++i){
now = now * v[i][j] + v[i][j];
ans = (ans + f[now]) % mod;
}
std::cout<<ans<<std::endl;
}
CF1511E Colorings and Dominoes的更多相关文章
- POJ1717 Dominoes[背包DP]
Dominoes Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6731 Accepted: 2234 Descript ...
- 2016 Multi-University Training Contest 1 I. Solid Dominoes Tilings
Solid Dominoes Tilings Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- uva 11270 - Tiling Dominoes(插头dp)
题目链接:uva 11270 - Tiling Dominoes 题目大意:用1∗2木块将给出的n∗m大小的矩阵填满的方法总数. 解题思路:插头dp的裸题,dp[i][s]表示第i块位置.而且该位置相 ...
- codeforces 342D Xenia and Dominoes(状压dp+容斥)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud D. Xenia and Dominoes Xenia likes puzzles ...
- ZOJ Problem Set - 2563 Long Dominoes 【如压力dp】
称号:ZOJ Problem Set - 2563 Long Dominoes 题意:给出1*3的小矩形.求覆盖m*n的矩阵的最多的不同的方法数? 分析:有一道题目是1 * 2的.比較火.链接:这里 ...
- AtCoder Beginner Contest 071 D - Coloring Dominoes
Problem Statement We have a board with a 2×N grid. Snuke covered the board with N dominoes without o ...
- [LeetCode] Push Dominoes 推多米诺骨牌
There are N dominoes in a line, and we place each domino vertically upright. In the beginning, we si ...
- [Swift]LeetCode838. 推多米诺 | Push Dominoes
There are N dominoes in a line, and we place each domino vertically upright. In the beginning, we si ...
- 6993: Dominoes(纯bfs)
题目描述Orz likes to play dominoes. Now giving an n*m chessboard and k dominoes whose size are 1*2, Orz ...
随机推荐
- 【UE4】GAMES101 图形学作业0:矩阵初识
作业描述 给定一个点P=(2,1), 将该点绕原点先逆时针旋转45◦,再平移(1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算). UE4 知识点 主要矩阵 FMatrix FBasisVec ...
- Java:动态代理小记
Java:动态代理小记 对 Java 中的 动态代理,做一个微不足道的小小小小记 概述 动态代理:当想要给实现了某个接口的类中的方法,加一些额外的处理.比如说加日志,加事务等.可以给这个类创建一个代理 ...
- [敏捷软工团队博客]Beta阶段项目展示
团队成员简介和个人博客地址 头像 姓名 博客园名称 自我介绍 PM 测试 前端 后端 dzx 秃头院的大闸蟹 大闸蟹是1706菜市场里无菜可卖的底层水货.大闸蟹喜欢音乐(但可惜不会),喜欢lol(可惜 ...
- 【二食堂】Alpha - Scrum Meeting 4
Scrum Meeting 4 例会时间:4.14 12:30 - 12:50 进度情况 组员 昨日进度 今日任务 李健 1. 主页面的搭建工作issue 1. 完成主页搭建**issue2. 与后端 ...
- 设置nginx进程可打开最大的文件数
涉及到的nginx配置参数: worker_processes: 表示操作系统启动多少个工作进程在运行,一般这个参数设置成CPU核数的倍数 worker_connections:表示nginx的工作进 ...
- UVA-1016 Silly Sort
UVA-1016 题目大意:给定一个长度为n的序列,每次操作可以交换任意两个数的位置,代价为两个数的和,求最小代价,将序列排成有序的. 首先,显然需要交换的数一定会形成环: 那么对于每一个环,我们有两 ...
- 猫狗收容所 牛客网 程序员面试金典 C++
猫狗收容所 牛客网 程序员面试金典 C++ 题目描述 有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或 ...
- 求树的直径【两遍BFS】
两遍BFS.从任意一个点出发,第一遍可以找到直径的一端,从这端出发即可找到另外一端. 证明:从U点出发,到达V[画个图便清晰了] 1.如果U在直径上,则V一定是直径的一个端点. 2.如果U不在直径上. ...
- CentOS 7 tmpwatch 2.11 版本变更,移除 cronjob 任务
老版本(RHEL6) tmpwatch 原理 在 RHEL6 上,/tmp 目录的清理工作通常是交给 tmpwatch 程序来完成的,tmpwatch 的工作机制是通过 /etc/cron.daily ...
- 攻防世界 Misc 新手练习区 gif Writeup
攻防世界 Misc 新手练习区 gif Writeup 题目介绍 题目考点 仔细联想 字符转换 Writeup 下载附件并打开 104张黑白图 发现是一堆黑色和白色的图片,按某种规律排列,猜想flag ...