SDUT 3568 Rock Paper Scissors 状压统计
就是改成把一个字符串改成三进制状压,然后分成前5位,后5位统计,
然后直接统计 f[i][j][k]代表,后5局状压为k的,前5局比和j状态比输了5局的有多少个人
复杂度是O(T*30000*25*m)m比较小,也就最多几十吧,将将过
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <vector>
#include <cmath>
#include <queue>
#include <map>
#include <string>
using namespace std;
typedef long long LL;
const int N=3e4+;
const int M=;
const int INF=0x3f3f3f3f;
int get(int x,int y){
int ret=;
for(int k=;k<;++k){
int dig0=x%,dig1=y%;
if(dig0==(dig1+)%)++ret;
x/=,y/=;
}
return ret;
}
vector<int> win[][M],lose[][M];
int T,cas,n,a[N][],ret[N][],f[][M][M];
char ch[];
int main(){
for(int i=;i<M;++i){
for(int j=;j<M;++j){
win[get(i,j)][i].push_back(j);
lose[get(i,j)][j].push_back(i);
}
}
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<n;++i)
{
scanf("%s",ch);
for(int j=;j<;++j)
{
if(ch[j]=='R')a[i][j]=;
else if(ch[j]=='P')a[i][j]=;
else a[i][j]=;
}
}
memset(f,,sizeof(f));
memset(ret,,sizeof(ret));
for(int i=;i<n;++i)
{
int mask0=,mask1=;
for(int j=;j<;++j)mask0=mask0*+a[i][j];
for(int j=;j<;++j)mask1=mask1*+a[i][j];
for(int j=;j<=;++j)
{
for(int k=;k<lose[j][mask0].size();++k)
{
int t=lose[j][mask0][k];
++f[j][t][mask1];
}
}
}
for(int i=;i<n;++i){
int mask0=,mask1=;
for(int j=;j<;++j)mask0=mask0*+a[i][j];
for(int j=;j<;++j)mask1=mask1*+a[i][j];
for(int s0=;s0<=;++s0)
for(int s1=;s1<=;++s1){
for(int k=;k<win[s1][mask1].size();++k){
int t=win[s1][mask1][k];
ret[i][s0+s1]+=f[s0][mask0][t];
}
}
--ret[i][];
}
printf("Case #%d:\n",++cas);
for(int i=;i<n;++i){
for(int j=;j<;++j)
printf("%d ",ret[i][j]);
printf("%d\n",ret[i][]);
}
}
return ;
}
SDUT 3568 Rock Paper Scissors 状压统计的更多相关文章
- 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)
2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...
- Gym - 101667H - Rock Paper Scissors FFT 求区间相同个数
Gym - 101667H:https://vjudge.net/problem/Gym-101667H 参考:https://blog.csdn.net/weixin_37517391/articl ...
- FFT(Rock Paper Scissors Gym - 101667H)
题目链接:https://vjudge.net/problem/Gym-101667H 题目大意:首先给你两个字符串,R代表石头,P代表布,S代表剪刀,第一个字符串代表第一个人每一次出的类型,第二个字 ...
- Gym101667 H. Rock Paper Scissors
将第二个字符串改成能赢对方时对方的字符并倒序后,字符串匹配就是卷积的过程. 那么就枚举字符做三次卷积即可. #include <bits/stdc++.h> struct Complex ...
- 【题解】CF1426E Rock, Paper, Scissors
题目戳我 \(\text{Solution:}\) 考虑第二问,赢的局数最小,即输和平的局数最多. 考虑网络流,\(1,2,3\)表示\(Alice\)选择的三种可能性,\(4,5,6\)同理. 它们 ...
- 题解 CF1426E - Rock, Paper, Scissors
一眼题. 第一问很简单吧,就是每个 \(\tt Alice\) 能赢的都尽量让他赢. 第二问很简单吧,就是让 \(\tt Alice\) 输的或平局的尽量多,于是跑个网络最大流.\(1 - 3\) 的 ...
- HDOJ(HDU) 2164 Rock, Paper, or Scissors?
Problem Description Rock, Paper, Scissors is a two player game, where each player simultaneously cho ...
- HDU 2164 Rock, Paper, or Scissors?
http://acm.hdu.edu.cn/showproblem.php?pid=2164 Problem Description Rock, Paper, Scissors is a two pl ...
- 1090-Rock, Paper, Scissors
描述 Rock, Paper, Scissors is a classic hand game for two people. Each participant holds out either a ...
随机推荐
- 2013 Multi-University Training Contest 1 3-idiots
解题报告: 记录 A_i 为长度为 i 的树枝的数量,并让 A 对它本身做 FFT,得到任意选两个树枝能得到的各个和的数量.枚举第三边, 计算出所有两边之和大于第三条边的方案数,并把前两条边包含最长边 ...
- Oracle 9 - redo和undo
1.redo redo 有在线redo日志和归档redo日志, 从Oracle 10g开始还新增加了flashback技术. 每个Oracle数据库至少有2个在线重做日志组,循环写. 只有INSERT ...
- lintcode 中等题:partition array 数组划分
题目 数组划分 给出一个整数数组nums和一个整数k.划分数组(即移动数组nums中的元素),使得: 所有小于k的元素移到左边 所有大于等于k的元素移到右边 返回数组划分的位置,即数组中第一个位置i, ...
- lintcode:Unique Characters 判断字符串是否没有重复字符
题目: 判断字符串是否没有重复字符 实现一个算法确定字符串中的字符是否均唯一出现 样例 给出"abc",返回 true 给出"aab",返回 false 挑战 ...
- QT 焦点事件(4种方式的解释,还有委托焦点)
1.setFocusPolicy(...)设置获得焦点的方式 Qt::TabFocus 通过Tab键获得焦点 Qt::ClickFocus 通过被单击获得焦点 Qt::StrongFocus 可通过上 ...
- Intellij Idea 创建EJB项目入门(一)
相关软件: 1.JBoss(jboss-as-7.1.1.Final):http://jbossas.jboss.org/downloads 2.Intellij IDEA 13.02 3.JDK 1 ...
- UVa 11524 - InCircle
推公式 #include <cstdio> #include <cmath> double Cal( double a, double b, double c ) { retu ...
- Tomcat原理 分类: 原理 2015-06-28 19:26 5人阅读 评论(0) 收藏
Tomcat的模块结构设计的相当好,而且其Web 容器的性能相当出色.JBoss直接就使用了Tomcat的web容器,WebLogic的早期版本也是使用了Tomcat的代码. Web容器的工作过程在下 ...
- .net MVC APi调用
常用的调用方法为Get/Post Get方法: 服务器 public string Get(int id) { return "value"; } 这个直接在网页就可以测试,用 h ...
- Linux3.4内核的基本配置和编译
转载自:http://www.embedu.org/Column/Column634.htm 作者:李昕,华清远见研发中心讲师. 了解Linux3.4内核的特性及新增功能,掌握Linux内核的编译过程 ...