前言

这道题看上去很水,结果我在比赛上浪费了N多时间在上面,但还是没AC。比赛结束后发现:实际上这道题还是是大水。

题目

分析

设字符串c1c2c3c4,其中c1、c2、c3、c4={'0''9','a''z','#'},'#'代表任意字符(例如字符串"#123"等于"0123"、"1123"、"2123"、···、“y123"、"z123")。

f[c1][c2][c3][c4]表示目前与字符串c1c2c3c4相等的字符串有多少个;

然后按照输入顺序,依次把输入的字符串放入f,再放入之前容斥求增加的答案就可以了。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
using namespace std;
int m,d,n,tot,ans,b[200];
int f[40][40][40][40];//0指'#'
char s[5];
int main()
{
scanf("%d%d\n",&n,&d);
tot=0;
for(int g='0';g<='9';g++)
b[g]=++tot;
for(int g='a';g<='z';g++)
b[g]=++tot;
ans=0;
for(int q=1;q<=n;q++)
{
scanf("%s\n",s);
if(d==3)
{
for(int j=0;j<=1;j++)
for(int k=0;k<=1;k++)
for(int l=0;l<=1;l++)
for(int g=0;g<=1;g++)
if((j+k+l+g)==1)
ans+=f[j*b[s[0]]][k*b[s[1]]][l*b[s[2]]][g*b[s[3]]];
else
if((j+k+l+g)==3)
ans+=f[j*b[s[0]]][k*b[s[1]]][l*b[s[2]]][g*b[s[3]]]*3;
else
if((j+k+l+g)==2) ans-=f[j*b[s[0]]][k*b[s[1]]][l*b[s[2]]][g*b[s[3]]]*2;
else
if((j+k+l+g)==4) ans-=f[j*b[s[0]]][k*b[s[1]]][l*b[s[2]]][g*b[s[3]]]*4;
}
else
if(d==2)
{
for(int j=0;j<=1;j++)
for(int k=0;k<=1;k++)
for(int l=0;l<=1;l++)
for(int g=0;g<=1;g++)
if((j+k+l+g)==2)
{
ans+=f[j*b[s[0]]][k*b[s[1]]][l*b[s[2]]][g*b[s[3]]];
}
else
if((j+k+l+g)==3)
{
ans-=f[j*b[s[0]]][k*b[s[1]]][l*b[s[2]]][g*b[s[3]]]*3;
}
else
if((j+k+l+g)==4)
{
ans+=f[j*b[s[0]]][k*b[s[1]]][l*b[s[2]]][g*b[s[3]]]*6;
}
}
else
if(d==1)
{
for(int j=0;j<=1;j++)
for(int k=0;k<=1;k++)
for(int l=0;l<=1;l++)
for(int g=0;g<=1;g++)
if((j+k+l+g)>=3)
if((j+k+l+g)%2) ans+=f[j*b[s[0]]][k*b[s[1]]][l*b[s[2]]][g*b[s[3]]];
else ans-=f[j*b[s[0]]][k*b[s[1]]][l*b[s[2]]][g*b[s[3]]]*4;
}
else
if(d==4)
{
for(int j=0;j<=1;j++)
for(int k=0;k<=1;k++)
for(int l=0;l<=1;l++)
for(int g=0;g<=1;g++)
if((j+k+l+g)>=0)
if(!((j+k+l+g)%2)) ans+=f[j*b[s[0]]][k*b[s[1]]][l*b[s[2]]][g*b[s[3]]];
else ans-=f[j*b[s[0]]][k*b[s[1]]][l*b[s[2]]][g*b[s[3]]];
}
for(int j=0;j<=1;j++)
for(int k=0;k<=1;k++)
for(int l=0;l<=1;l++)
for(int g=0;g<=1;g++)
f[j*b[s[0]]][k*b[s[1]]][l*b[s[2]]][g*b[s[3]]]++;
}
printf("%d\n",ans);
}

【GDOI2016模拟3.10】习用之语的更多相关文章

  1. 【GDOI2016模拟3.15】基因合成(回文串+性质+DP)

    [GDOI2016模拟3.15]基因合成 题意: 给一个目标串,要求从空串进行最少的操作次数变成目标串,操作有两种: 在串的头或尾加入一个字符. 把串复制一遍后反向接到串的末尾. 因为有回文操作,所以 ...

  2. 【GDOI2016模拟3.16】幂(容斥 + 模型复杂转化)

    [GDOI2016模拟3.16]幂 \(X\in[1,A],Y\in[1,B]\),问:\(x^y\)的不用取值个数. \(A,B\)都是\(10^9\)级别. 然后我们开搞. 首先,假设一个合法的\ ...

  3. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  4. [NOIP2018模拟赛10.16]手残报告

    [NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...

  5. 【noip模拟赛10】奇怪的贸易 高精度

    描述 刚结束了CS战斗的小D又进入了EVE的游戏世界,在游戏中小D是一名商人,每天要做的事情就是在这里买东西,再运到那里去卖.这次小D来到了陌生的X星,X星上有n种货物,小D决定每种都买走一些,他用a ...

  6. [考试反思]0729NOIP模拟测试10

    安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...

  7. NOIP模拟测试10「大佬·辣鸡·模板」

    大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...

  8. 20180824Noip模拟赛10分总结

    嗯,总之,是我太傻了. 我真傻,真的,我单知道最小生成树,却不知道还有最大生成树 T1 最大生成树.... 累加每一个环内,最大生成树的边权,(对环求最大生成树,则必然剩下一个边权最小的边(因为是求生 ...

  9. .net core Json字符串的序列化和反序列化通用类源码,并模拟了10万数据对比DataContractJsonSerializer和Newtonsoft性能

    我们在开发中Json传输数据日益普遍,有很多关于Json字符串的序列化和反序列化的文章大多都告诉你怎么用,但是却不会告诉你用什么更高效.因为有太多选择,人们往往会陷入选择难题. 相比.NET Fram ...

随机推荐

  1. CircleCI 前端自动部署

    概述 现在很多前端库都用到了 CircleCI 进行自动部署,比如Vue,React,作为一个前端我觉得还是有必要实操一下 CircleCI 的,总体来说还是挺简单的,我把过程和体会记录下来,供以后开 ...

  2. JavaSE部分1.Java基础

    1.为什么重写equals()还要重写hashcode()?  (equals()和hashCode()是java Object中两个基本方法) 首先equals与hashcode间的关系是这样的: ...

  3. 【漏洞复现】永恒之蓝 ms17-010 漏洞利用 攻击手法

    日期:2018-07-21 21:09:16 介绍:永恒之蓝利用的 ms17-010 漏洞,拿 Shell.查看文件.获取密码. 0x01.实验环境 攻击机 系统:macOS Sierra 10.12 ...

  4. HashMap中确定数组位置为什么要用hash进行扰动

    HashMap数据存储的过程先根据key获得hash值,通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存 ...

  5. 工作笔记之:如何在eclipse安装CVS插件?找了很久的,自己总结一下

    (1)在主目录里“help”→Install New Software.....→The Eclipse Project Updates - http://download.eclipse.org/e ...

  6. pureftp安装

    1.下载 #cd /usr/local/src #wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.36.t ...

  7. 100行代码撸完SpringIOC容器

    用过Spring框架的人一定都知道Spring的依赖注入控制反转;通俗的讲就是负责实例化对象 和 管理对象间的依赖 实现解耦. 我们来对比两段代码: UserController{ UserServi ...

  8. 为什么要用消息队列 及 自己如何设计一个mq架构

    1. 解耦:如左图, 系统a因为业务需求需要调用系统b,后续因为业务需求可能需要改代码调用系统c,甚至还要考虑被调用的系统挂了访问超时的问题.耦合性太高! 如右图, 系统a产生一条数据发送到消息队列里 ...

  9. 46. Permutations (JAVA)

    Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3] O ...

  10. [转载]NOR和NAND 存储器的联系与区别

    转载了,对于我理解两种Flash起到了帮助,希望博主继续再接再厉,更新博文 原文地址:存储器的联系与区别">NOR和NAND 存储器的联系与区别作者:暴走的工程师 一.类型理解     ...