博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-4403 A very hard Aoshu problem 枚举
阅读量:6432 次
发布时间:2019-06-23

本文共 1180 字,大约阅读时间需要 3 分钟。

直接枚举等号所在位置,然后左右两边用两个MAP来记录组成和的个数,然后运用乘法原理得到答案。

代码如下:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long longusing namespace std;char s[20];int len;map
fmp, tmp;long long get(int x, int y) { long long ret = 0; for (int i = x; i <= y; ++i) { ret = ret * 10 + s[i] - '0'; } return ret;}void cal(int a, int b, map
&mp) { if (a == b) { ++mp[s[a]-'0']; return; } int mask = 1 << (b-a), last; for (int i = 0; i < mask; ++i) { long long temp = 0; last = a; for (int j = 0; j < (b-a); ++j) { if (i & (1 << j)) { temp += get(last, a + j); last = a + j + 1; } } temp += get(last, b); ++mp[temp]; }}long long solve(int x) { long long ret = 0; fmp.clear(), tmp.clear(); map
::iterator it; cal(0, x, fmp); cal(x+1, len-1, tmp); for (it = fmp.begin(); it != fmp.end(); ++it) { ret += (long long)(it->second) * (long long)tmp[it->first]; } return ret;}int main( ){ long long ret; while (scanf("%s", s), s[0] != 'E') { ret = 0; len = strlen(s); for (int i = 0; i <= len-2; ++i) { // 枚举等号所在的位置 ret += solve(i); } printf("%I64d\n", ret); } return 0;}

 

转载地址:http://satga.baihongyu.com/

你可能感兴趣的文章
mysql 数据库集群搭建:(二)3台CentOS-7安装Percona-XtraDB-Cluster-57集群
查看>>
Jenkins实战演练之Windows系统节点管理
查看>>
MySQL高可用架构之MHA
查看>>
1.8 nginx域名跳转
查看>>
PHP面向对象之接口编程
查看>>
使用 Docker Compose 管理多个容器实例
查看>>
ThinkPHP 删除数据记录 delete 方法
查看>>
Gradle学习笔记(二)--创建Java项目
查看>>
IntelliJ IDEA 快捷键
查看>>
qury-easyui DataGrid 整合struts2增删查该入门实例(三)
查看>>
if a point is inside a square with mathematics
查看>>
Ubuntu(Linux)使用Eclipse搭建C/C++编译环境
查看>>
skyline无插件web的数据加载解析
查看>>
python基础学习第一天
查看>>
硬盘存储双寡头之争 希捷重注中国市场或赢大丰收
查看>>
淘宝电影联合华谊的数据报告,还有哪些重要信息?
查看>>
编译安装PHP
查看>>
css position:static 的使用
查看>>
nfs永久挂载与临时挂载
查看>>
linux查看网络链接状况命令之-netstat
查看>>