[折腾笔记] 洛谷P1149-火柴棒等式 AC记
原题链接: https://www.luogu.org/problem/P1149
题面简述:
给你n根火柴棍,你可以拼出多少个形如“A+B=C”“A+B=C”“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:
注意:
- 加号与等号各自需要两根火柴棍
- 如果A≠B,则A+B=C与B+A=C视为不同的等式(A,B,C>=0)
- n根火柴棍必须全部用上
思路:
等式可能的情况:
x+y=zx + y = zx+y=z
xx+yy=zzxx+yy=zzxx+yy=zz
xxx+yyy=zzzxxx+yyy=zzzxxx+yyy=zzz
xxxx+yyyy=zzzzxxxx+yyyy=zzzzxxxx+yyyy=zzzz
为啥这么说呢?因为计算在极端条件n=24n = 24n=24,的情况下,最高位数是:
24÷2=1224\div 2=1224÷2=12 (如果全部摆111的话,可以摆121212个111) 12÷3=412\div 3=412÷3=4 一共有333个数,于是最多444位。
于是,我们大可枚举,因为枚举的话再加上优化,不会超时所以,就可以写出如下代码:
#include <bits/stdc++.h>
using namespace std;
int s[] = {6,2,5,5,4,5,6,3,7,6};
int t = 4;
int ans = 0;
bool judge(int a,int b,int c,int n) {
int p = 0;
string d = to_string(a),e = to_string(b),f = to_string(c);
for(int i = 0;i<d.length();++i) p+=s[d[i]-'0'];
for(int i = 0;i<e.length();++i) p+=s[e[i]-'0'];
for(int i = 0;i<f.length();++i) p+=s[f[i]-'0'];
if(p==n) {
return 1;
}
return 0;
}
int main() {
int n;
cin>>n;
n-=4;
for(int i = 0;i<=9999;++i) {
for(int j = 0;j<=9999;++j) {
int k = i+j;
if(i+j==k&&judge(i,j,k,n)) {
ans++;
}
}
}
cout<<ans<<endl;
}
另外之前还犯了个错误:
#include <bits/stdc++.h>
using namespace std;
int s[] = {6,2,5,5,4,5,6,3,7,6};
int t = 4;
int ans = 0;
bool judge(int a,int b,int c,int n) {
int p = 0;
string d = to_string(a),e = to_string(b),f = to_string(c);
for(int i = 0;i<d.length();++i) p+=s[d[i]-'0'];
for(int i = 0;i<e.length();++i) p+=s[e[i]-'0'];
for(int i = 0;i<f.length();++i) p+=s[f[i]-'0'];
if(p==n) {
return 1;
}
return 0;
}
int main() {
int n;
cin>>n;
n-=4;
for(int i = 0;i<=n;++i) {
for(int j = 0;j<=n;++j) {
int k = i+j;
if(i+j==k&&judge(i,j,k,n)) {
ans++;
}
}
}
cout<<ans<<endl;
}
这里只枚举到n不够。
[折腾笔记] 洛谷P1149-火柴棒等式 AC记的更多相关文章
- 用Python写算法题--洛谷P1149 火柴棒等式
题目 题目来源 P1149 火柴棒等式,https://www.luogu.org/problem/P1149 题目描述 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式? ...
- [NOIP2008] 提高组 洛谷P1149 火柴棒等式
题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 加号与等号各自 ...
- 洛谷P1149 火柴棒等式
题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 1.加号与等号 ...
- 洛谷 P1149 火柴棒等式
嗯.... 这道题好讨厌啊!!!! 一开始莫名RE,然后发现数组小了,然后发现后面几个点总是WA,原来推的少了.... 并且这道题的思路真的好水啊!! 先看一下题: 题目描述 给你n根 ...
- 洛谷P1149.火柴棒等式(暴力搜索)
题目描述 给你n根火柴棍,你可以拼出多少个形如"A+B=C"的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注 ...
- (水题)洛谷 - P1149 - 火柴棒等式
https://www.luogu.org/problemnew/show/P1149 一开始还分类重复了.在非0的dfs中居然赋值了0,脑残得一笔. 其实就按 $lead0$ 分类就好了, $lea ...
- Java实现 洛谷 P1149 火柴棒等式
import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.S ...
- luogu P1149 火柴棒等式
题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 加号与等号各自 ...
- (函数)P1149 火柴棒等式
题解: #include<stdio.h>int a[10]={6,2,5,5,4,5,6,3,7,6};int num(int n){ ...
随机推荐
- python中根据时间获取周数,通过周数获取时间
# 时间## 时间和周数 import time import datetime # 获取今天是第几周 print(time.strftime('%W')) # 获取当前是周几(0-6,0代表周一) ...
- OptimalSolution(3)--链表问题(2)进阶
一.环形单链表的约瑟夫问题 二.判断一个链表是否为回文结构 三.将单向链表按某只划分成左边小.中间相等.右边大的形式 四.复制含有随机指针节点的链表 五.两个单链表相交的一系列问题 六.将单链表的每K ...
- Redis(十一)缓存设计
一.缓存的收益和成本 左侧为客户端直接调用存储层的架构,右侧为比较典型的缓存层+存储层架构, 缓存加入后带来的收益如下: 加速读写:因为缓存通常都是全内存的(例如Redis.Memcache),而存储 ...
- 什么是Viewport
什么是Viewport 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机 ...
- leetcode算法小题(3)
问题描述: 判断一个数是否为回文数 class Solution { public boolean isPalindrome(int x) { if(x<0) ...
- java和Jvm目录
回到占占推荐博客索引 主要介绍java基础知识,非框架类及JVM相关的内容文章 java和Jvm目录 Java~关于开发工具和包包 Java~类,抽象类和接口 Java~时间戳小知识 Java~命名规 ...
- window10系统下,彻底删除卸载mysql
本文介绍,在Windows10系统下,如何彻底删除卸载MySQL...1>停止MySQL服务开始->所有应用->Windows管理工具->服务,将MySQL服务停止.2> ...
- 「2019.8.9 考试」神仙的dp总让人无所适从
T1是个容斥,我掐手指一算他为了卡容斥的正确性,绝不会把n和m出的很相近($O(n^2)$算法在nm相等的时候达到最高时间复杂度),不然就太好做了,于是开了特判+各种卡常和滚动数组优化,卡到了70分, ...
- docker基本操作教程
镜像操作 获取镜像 从Docker Hub搜索镜像: docker search ubuntu 下载镜像: docker pull ubuntu:18.04 若下载镜像速度较慢,更改镜像源: Ubun ...
- Android 开源库 GitHub 托管
本文微信公众号「AndroidTraveler」首发. 背景 之前给大家写过一篇文章 Android 上传开源项目到 jcenter 实战踩坑之路,分享了上传开源项目到 jcenter 上面的一些踩坑 ...