就是改成把一个字符串改成三进制状压,然后分成前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 状压统计的更多相关文章

  1. 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 H题 Rock Paper Scissors Lizard Spock.(FFT字符串匹配)

    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛:https://www.jisuanke.com/contest/1227 题目链接:https://nanti.jisuanke.com/t ...

  2. Gym - 101667H - Rock Paper Scissors FFT 求区间相同个数

    Gym - 101667H:https://vjudge.net/problem/Gym-101667H 参考:https://blog.csdn.net/weixin_37517391/articl ...

  3. FFT(Rock Paper Scissors Gym - 101667H)

    题目链接:https://vjudge.net/problem/Gym-101667H 题目大意:首先给你两个字符串,R代表石头,P代表布,S代表剪刀,第一个字符串代表第一个人每一次出的类型,第二个字 ...

  4. Gym101667 H. Rock Paper Scissors

    将第二个字符串改成能赢对方时对方的字符并倒序后,字符串匹配就是卷积的过程. 那么就枚举字符做三次卷积即可. #include <bits/stdc++.h> struct Complex ...

  5. 【题解】CF1426E Rock, Paper, Scissors

    题目戳我 \(\text{Solution:}\) 考虑第二问,赢的局数最小,即输和平的局数最多. 考虑网络流,\(1,2,3\)表示\(Alice\)选择的三种可能性,\(4,5,6\)同理. 它们 ...

  6. 题解 CF1426E - Rock, Paper, Scissors

    一眼题. 第一问很简单吧,就是每个 \(\tt Alice\) 能赢的都尽量让他赢. 第二问很简单吧,就是让 \(\tt Alice\) 输的或平局的尽量多,于是跑个网络最大流.\(1 - 3\) 的 ...

  7. HDOJ(HDU) 2164 Rock, Paper, or Scissors?

    Problem Description Rock, Paper, Scissors is a two player game, where each player simultaneously cho ...

  8. HDU 2164 Rock, Paper, or Scissors?

    http://acm.hdu.edu.cn/showproblem.php?pid=2164 Problem Description Rock, Paper, Scissors is a two pl ...

  9. 1090-Rock, Paper, Scissors

    描述 Rock, Paper, Scissors is a classic hand game for two people. Each participant holds out either a ...

随机推荐

  1. Ubuntu环境下手动配置ElasticSearch0.90.5

    1 下载elasticsearch-0.90.5 2 修改配置(可选) 修改内存:(可选) bin/elasticsearch.in.sh中: ES_MIN_MEM ES_MAX_MEM 修改搜索引擎 ...

  2. 360 chrome不能登录Google账户

    用过Google chrome,枫树,360 chrome国际版,今天还是回到Google chrome了. 因为除了Chrome自己,其他的都不能正常登录Google账户(偶尔偶尔一次可以,直到今天 ...

  3. Java学习笔记之:Java简介

    一.引言 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出. ...

  4. c语言头文件和源文件不在同一个目录

    http://www.cnblogs.com/ShaneZhang/archive/2013/05/20/3088688.html 从工程上讲,头文件的文件名应该与对应的源文件名相同便于维护,如果头文 ...

  5. AXURE制作APP抽屉式菜单

    1.拖一个dynamic panel到窗体,将State1改名为State_首页: 2.拖2个dynamic panel到State_首页中,分别命名为侧边菜单及首页内容,首页内容盖住侧边菜单: 3. ...

  6. R语言字符串函数

    字符串长度: nchar("hello world") #字符串连接:paste) <- value substr("abcdef", 2, 4)[1] ...

  7. Android开发之单例模式

    参考:http://blog.csdn.net/guolin_blog/article/details/8860649 http://www.cnblogs.com/liyiran/p/5283690 ...

  8. android中最先被执行的activity

    像C.C++.JAVA都有一个主函数作为程序的入口点,但是Android中并没有一个明确的主窗口,那么在有多个Activity的情况下,最先被执行的是哪个呢?这完全取决于配置文件AndroidMain ...

  9. BestCoder Round #2 1001 (简单处理)

    题目链接 题意:给N条信息,每个信息代表有x个人从开始的时间 到 结束的时间在餐厅就餐, 问最少需要多少座位才能满足需要. 分析:由于时间只有24*60 所以把每个时间点放到 数组a中,并标记开始的时 ...

  10. 函数buf_read_page_low

    /********************************************************************//** Low-level function which r ...