NOIP2002普及T3【产生数】
做完发现居然没人用map搞映射
特意来补充一发
很容易看出这是一道搜索题
考虑搜索方案,如果按字符串转移,必须存储每种状态,空间复杂度明显会爆炸
观察到每一位之间是互不影响的
考虑使用乘法原理
搜索出每一位的情况总数,求它们的连乘积即为答案
时间复杂度O(n2^k)
可以看出答案最大可以达到三十的十次方,会爆掉long long,所以需要写高精
具体处理可以选择STL(懒得自己写)
对于映射,这是map的专长
如果一个数能够映射到多个数呢?
用map的时候从char映射到vector<char>即可
代码:
#include<iostream>
#include<cstdio>
#include<map>
#include<vector>
#include<cstring>
using namespace std;
map<char,vector<char> >mp;
string st;
int k,l,c[],mul[];
void dfs(char th)
{
c[th-'']=;
int sz=mp[th].size();
for(int i=;i<sz;i++)
if(!c[mp[th][i]-''])
dfs(mp[th][i]);
}
signed main()
{
cin>>st>>k;
l=st.length();
for(int i=;i<=k;i++)
{
char x,y;
cin>>x>>y;
mp[x].push_back(y);
}
mul[]=;
for(int i=;i<l;i++)
{
memset(c,,sizeof(c));
dfs(st[i]);
int sum=;
for(int i=;i<=;i++)
sum+=c[i];
int x=;
for(int i=;i<;i++)
{
mul[i]=mul[i]*sum+x;
x=mul[i]/;
mul[i]%=;
}
}
int i=;
while(i>&&!mul[i])
i--;
for(;i>=;i--)
cout<<mul[i];
cout<<endl;
return ;
}
NOIP2002普及T3【产生数】的更多相关文章
- 洛谷P1036 [NOIP2002 普及组] 选数 (搜索)
n个数中选取k个数,判断这k个数的和是否为质数. 在dfs函数中的状态有:选了几个数,选的数的和,上一个选的数的位置: 试除法判断素数即可: 1 #include<bits/stdc++.h&g ...
- NOIP2002普及组复赛B 选数
题目链接:https://ac.nowcoder.com/acm/contest/230/B 题目大意: 略 分析: DFS模板题. 代码如下: #include <bits/stdc++.h& ...
- [NOIP2002] 普及组
产生数 预处理出一个数能变成多少种数,然后遍历原串的每一位,累乘方案数即可. 需要用到高精度. /*By SilverN*/ #include<iostream> #include< ...
- noip2002 普及组 过河卒
题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为"马拦过 ...
- 题解 【洛谷P1035】[NOIP2002普及组]级数求和
[NOIP2002普及组]级数求和 这个题……用循环也是可以的,不过我写了两种循环的题解,供各位dalao参考!O(∩_∩)O谢谢! for循环版本: #include<bits/stdc++. ...
- [NOIP 2002普及组]产生数(floyd+高精度)
https://www.luogu.org/problem/P1037 题目描述 给出一个整数 n(n<1030) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: ...
- Noip2017 普及 T3 Chess
神奇的场上原码 #include<iostream> #include<cstdio> #include<cstring> #include<queue> ...
- C++算法代码——级数求和[NOIP2002 普及组]
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1078 或者:https://www.luogu.com.cn/problem/P10 ...
- NOIP2002pj产生数[floyd 高精度]
背景 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15). 规则:一位数可变换成另一个一位数:规则的右部不能为零. 例如:n=234.有规则(k=2):2-> 53 ...
随机推荐
- loj6070【山东集训第一轮Day4】基因
题解: 分块对每个块的起点$st[i]$到$n$做一次回文自动机; 由于子串的回文自动机是原串的子图,所以并不需要重新构图,在原来的图上做即可: 做的时候记录某个终点的本质不同的回文串和$sum[i] ...
- Chapter8(IO库) --C++Prime笔记
1.IO对象不能拷贝或对IO对象赋值,进行IO操作的函数通常是以引用方式传递和返回流. 2.一个流一旦发生错误,其上的后续的IO操作都会失败.代码通常应该在使用一个流之前检查它是否处于良好状态.确定一 ...
- 发送邮件 tp5.1 5.0都可以,实测有效
https://www.cnblogs.com/zhensg123/p/8954175.html 博客文章少了个Expection.php 文件; common.php <?php // 应用公 ...
- python基础4--文件操作
文件操作 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 1.open()打开文件 #获取文件句柄 f = open("yesterday" ...
- Java基础-正则表达式(Regular Expression)语法规则简介
Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...
- css实现0.5像素的边框
公司的设计师在做设计图的时候都是以iphone6(宽为750物理像素)为基准进行设计的.iphone6的设备像素比(即css像素与物理像素的比例)是2,所以设计师在设计图画了边框为1px的box的时候 ...
- 在IDEA中实战Git 实用
工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下: 假设小组中有两个人,组长小张,组员小袁 场景一:小张创建项目并提交到远程Git仓库 场景二:小袁从远程Git仓库上获取项目源码 场景三:小 ...
- JAVA 急速WEB框架Blast-本人开发的JavaWeb急速框架Blast上线了
JAVA 急速WEB框架Blast ——对JavaWeb的学习性框架,参考了spring的实现 ——阅读Blast源码可以快速掌握JavaWeb常用技术和方法论,并付诸实践 Blast 是基于 Jav ...
- python学习笔记3-函数,判断负小数
一.函数 def hello(file_name,content): #形参file_name content f=open(file_name,'a+') f.seek(0) f.write(con ...
- windows下自动启动Redis隐藏命令行窗口
这段时间看了看关于Redis的相关内容,对于Redis在windows下的安装和常规启动我就不多说了.可以参考其他的博客http://www.cnblogs.com/edisonchou/p/3821 ...