Dice

[ Submit Code ] [ Top 20 Runs ] [ Runs Status ]
Acceteped : 284 Submit : 370
Time Limit : 1000 MS Memory Limit : 65536 KB

Description

Dice

题目描述

你有三颗六面的骰子,骰子的每个面上刻有0∼9个点(0个就是没有点),你可以用任意多颗骰子摆成一排,顶部的点数,从左到右组成一个数字,比如三颗骰子的顶部依次为1,0,9点,组成数字109。 你想知道手上的骰子能组成多少种不同的数字?

输入

第一行是一个整数T(1≤T≤1000),表示样例的个数。 每个样例为三行,每行6个数码,表示对应骰子六个面的点数。

输出

每行输出一个样例的结果。

样例输入

2
1 2 3 4 5 6
0 1 2 3 4 5
4 5 6 7 8 9
1 2 3 4 5 6
0 1 2 7 8 9
3 4 5 6 7 8

样例输出

720
810

这道题真的纯粹的暴力,相当暴力。。。。见代码

#include<iostream>
#include<unordered_set>
using namespace std;
unordered_set<int>ansset;
int input[5][12];
void force3(int start, int middle, int finish) {int i, j, k;for (i = 0; i < 6; i++) {for (j = 0; j < 6; j++) {for (k = 0; k < 6; k++) {ansset.insert(100 * input[start][i] + 10 * input[middle][j] + input[finish][k]);}}}
}
void force2(int start, int finish) {int i, j;for (i = 0; i < 6; i++) {for (j = 0; j < 6; j++) {ansset.insert(10 * input[start][i] +  input[finish][j]);}}
}
void force1(int start) {int i;for (i = 0; i < 6; i++) {ansset.insert(input[start][i]);}
}
int main() {int t, i, j;cin >> t;while (t--) {for (i = 1; i <= 3; i++) {for (j = 0; j < 6; j++) {cin >> input[i][j];}}force3(1, 2, 3);force3(1, 3, 2);force3(2, 1, 3);force3(2, 3, 1);force3(3, 2, 1);force3(3, 1, 2);force2(1, 2);force2(1, 2);force2(2, 1);force2(1, 3);force2(3, 1);force2(2, 3);force2(3, 2);force1(1);force1(2);force1(3);cout << ansset.size() << endl;ansset.clear();}
}

我们用电脑解决某个没头绪的问题的时候,因为不知道怎么弄,所以用简单粗暴的方法,人脑做这个就不太现实,而电脑完成这些工作就很简单了,所以要学好算法暴力法不能少(虽然在程序竞赛里很少直接用暴力法就可以解决的问题)

当然,暴力不能蛮目暴力,这道题我们分析一下每个样例的时间:

三个骰子,每个骰子6个面,即使枚举所有情况,也就6*6*6*6+6*6*6+6*3情况,这种计算量对计算机绰绰有余,除非1e9个样例,这种是种煎熬了。。。。。

看到有0ms的,我想想有没有其他办法。。。

#include<iostream>
#include<unordered_set>
using namespace std;
unordered_set<int>ansset;
unordered_set<int> foc[5];
unordered_set<int> ::iterator a, b, c;
void force3(int start, int middle, int finish) {for (a = foc[start].begin(); a != foc[start].end(); a++) {for (b = foc[middle].begin(); b != foc[middle].end(); b++) {for (c = foc[finish].begin(); c != foc[finish].end(); c++) {ansset.insert(*a * 100 + *b * 10 + *c);}}}
}
void force2(int start, int finish) {for (a = foc[start].begin(); a != foc[start].end(); a++) {for (b = foc[finish].begin(); b != foc[finish].end(); b++) {ansset.insert(*a * 10 + *b);}}
}
void force1(int start) {for (a = foc[start].begin(); a != foc[start].end(); a++) {ansset.insert(*a);}
}
int main() {cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);int t, i, j, input;cin >> t;while (t--) {for (i = 1; i <= 3; i++) {for (j = 0; j < 6; j++) {cin >> input;foc[i].insert(input);}}force3(1, 2, 3);force3(1, 3, 2);force3(2, 1, 3);force3(2, 3, 1);force3(3, 2, 1);force3(3, 1, 2);force2(1, 2);force2(1, 2);force2(2, 1);force2(1, 3);force2(3, 1);force2(2, 3);force2(3, 2);force1(1);force1(2);force1(3);cout << ansset.size() << endl;ansset.clear();foc[1].clear();foc[2].clear();foc[3].clear();}
}

进行了一个去重,想想能不能优化。。。

就按作业题目说的改成bit吧。。。我的天,15ms

#include<stdio.h>
#include<stdbool.h>
#include<string.h>
#define ME(x) memset(x,0,sizeof x)
bool bit[5][12], ans[1002];//最大凑999
void force3(int start, int middle, int finish) {int i, j, k;for (i = 0; i <= 9; i++) {if (bit[start][i]) for (j = 0; j <= 9; j++) {if (bit[middle][j])        for (k = 0; k <= 9; k++) {if (bit[finish][k]) ans[i * 100 + j * 10 + k] = 1;}}}
}
void force2(int start, int finish) {int i, j;for (i = 0; i <= 9; i++) {if (bit[start][i])    for (j = 0; j <= 9; j++) {if (bit[finish][j])        ans[i * 10 + j] = 1;}}
}
void force1(int start) {int i;for (i = 0; i <= 9; i++) {if (bit[start][i])   ans[i] = 1;}
}
int main() {int t, i, j, input, ansc;scanf("%d", &t);while (t--) {ansc = 0;for (i = 1; i <= 3; i++) {for (j = 0; j < 6; j++) {scanf("%d", &input);bit[i][input] = 1;}}force3(1, 2, 3);force3(1, 3, 2);force3(2, 1, 3);force3(2, 3, 1);force3(3, 2, 1);force3(3, 1, 2);force2(1, 2);force2(1, 2);force2(2, 1);force2(1, 3);force2(3, 1);force2(2, 3);force2(3, 2);force1(1);force1(2);force1(3);for (i = 0; i <= 1002; i++) {ansc += ans[i];}printf("%d\n", ansc);ME(ans);ME(bit);}
}

Source Code

Problem: 1426 User: 202205567311
Memory: 1184K Time: 15MS
Language: G++ Result: Accepted

6666666666

xtuoj 1426 骰子 Dice(纯暴力,大脑按摩,究极优化)(bushi相关推荐

  1. 玩骰子(概率,暴力)

    暴力就行,不过要注意,如果一开始就赢了,那么就不用再置骰子了那么就为1了. 1 #include<stdio.h> 2 #include<stdlib.h> 3 #includ ...

  2. 洛谷P1797 克鲁斯的加减法(纯暴力)

    题目戳这里 奶牛克鲁斯认为人类的加法算式太落后了.比如说有时候想要用加法计算+153,只能写成+15+15+15,真是浪费精力啊!于是,克鲁斯决定开发出一种新的加法算式.当然新的算式也是建立在原本算式 ...

  3. DFS中的回溯法(纯暴力穷举)

    首先回溯法是深度搜索(DFS)的一种,即把所有可能穷举,根据条件筛选出符合条件的路径. 回溯法模板格式 dfs(...){//根据递归终止条件进行筛选 if(符合需要的条件){存储合理路径 retur ...

  4. 蓝桥信用卡号验证 JAVA纯暴力破解

    1.从卡号最后一位数字开始,逆向将奇数位(1.3.5等等)相加. 2.从卡号最后一位数字开始,逆向将偶数位数字, 先乘以2(如果乘积为两位数,则将其减去9),再求和. 3.将奇数位总和加上偶数位总和, ...

  5. 谷歌大脑提出“洗发水”二阶优化算法,Transformer训练时间减少40%,Jeff Dean点赞...

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 机器学习的优化步骤,目前都是一阶方法主导. 无论是SGD还是Adam,此类优化算法在都是计算损失函数的一阶导数--梯度,然后按照某种规定的 ...

  6. 【EOJ Monthly 2019.02 - B】解题(思维,抽屉原理,暴力,模运算,优化,tricks)

    题干: 单测试点时限: 2.0 秒 内存限制: 1024 MB "我把房门上锁,并非为了不让她进去,而是为了防止自己逃到她身边". 她又被数学难住了.QQ 小方当然是不会对女生说& ...

  7. 【mp3】洗脑循环了!龙珠超 自在极意功 【究极の圣戦】串田アキラ 背景纯音乐...

    自在极意功情况下发动自带bgm 曲名:究极の圣戦 mp3:度盘下载>> 个人翻唱:全民k歌>> 转载于:https://www.cnblogs.com/wuhairui/p/7 ...

  8. 2021年第十二届蓝桥杯省赛B组(C/C++)个人题解

    Problem A 空间 计组基础题:256MB=256 * 2^20 * 8 位 所以存放32位元素可以存放 256 * 1024 * 1024 * 8 / 32 ans: 67108864 送分题 ...

  9. 中南4月16号网络同步赛

    题目大意: 1.求方程x^a==b(mod N)解的数量,N是奇数 2.按照方程x^a==b(mod N)的解指示信鸽放飞时间将信鸽分组,每一组不少于k个信鸽,求总延迟最少的分组方法 大概做法: 1. ...

最新文章

  1. 用Command实现校验器
  2. 职业高中计算机原理,132-浅议职业高中计算机组成原理教法初探
  3. python与php8-详解Python中Unicode和utf-8
  4. 心电图前波过多_心电图写着:T波倒置,就是心肌缺血吗?医生:不能如此草率...
  5. 用化学的方法分类键盘和鼠标
  6. fseek/ftell/rewind/fgetpos/fsetpos函数使用-linux
  7. Pycharm中配置Pyflink
  8. wireshark远程抓包
  9. 哔哩哔哩2019年Q4及全年财报:全年营收67.8亿元,同比增长64%
  10. LuoguP1041 传染病控制
  11. 阿牛的EOF牛肉串(递推dp)
  12. cssmatic gradient css generator,10 Best CSS Gradient Generators
  13. RoadRunner安装与使用教程
  14. 杭州优科豪马轮胎有限公司北京经销商
  15. Quorum区块链原理及其概念
  16. 关于hadoop安装中nodemanager启动失败的原因
  17. 【虚幻引擎UE】UE5 UMG布局和视觉设计(自适应篇)
  18. 扬子苦荞啤酒 一杯苦荞啤酒,精彩你的世界
  19. 力扣刷题day32|738单调递增的数字、714买卖股票的最佳时机含手续费、968监控二叉树
  20. 素描初学者入门教程素描高手分享经…

热门文章

  1. 华为“天才少年”有多牛?入职不到一年,算法就用于千万台华为手机
  2. 3ds Max 实验十三 贴图
  3. python常用框架
  4. 【Java面经】阿里三面被挂、幸获内推,历经5轮终于拿到口碑offer
  5. PADS VX2.8 过孔盖油与不盖油的设置方法
  6. 2021年制冷与空调设备运行操作考试及制冷与空调设备运行操作操作证考试
  7. 水轮发电机组计算机监控系统,计算机监控系统在低压水轮发电机组的应用
  8. 《人性的弱点》之对待抱怨地安全方式
  9. [附源码]PHP计算机毕业设计智能停车场管理系统(程序+LW)
  10. Python基础知识笔记(一)——数值类型