MiCode108 猜数字
Description
相传,十八世纪的数学家喜欢玩一种猜数字的小游戏,规则如下: 首先裁判选定一个正整数数字 N (2 \leq N \leq 200)N(2≤N≤200),然后选择两个不同的整数X, Y (1 \leq X \le Y \leq N)X,Y(1≤X≤Y≤N) 裁判告诉玩家S这两个数字的和;告诉玩家P这两个数字的乘积 由玩家S开始,双方依次告诉裁判自己是否知道X, Y分别是多少,如果有一方知道,那么游戏就结束了!
例如,裁判先选定N = 10N=10并将NN的值告诉玩家,然后从1~N中选择X = 3, Y = 6X=3,Y=6,并将它们的总和9告诉给玩家S,将它们的乘积18告诉给玩家P:
玩家S:“我不知道这些数字”
玩家P:“我不知道这些数字”
玩家S:“我不知道这些数字”
玩家P:“我不知道这些数字”
玩家S:“哦,我知道这些数字了,他们是3和6”
数学家们都非常的聪明,他们总能用最少的次数推断出这些数字。
现在给定N和M (0 \leq M \leq 100)(0≤M≤100),M为玩家回答“我不知道这些数字”的次数,请你给出裁判选择的X,Y的组合有多少种?
Solution
这么长时间终于做出来了好开心.
哈哈, 请教的群里的大佬们, 看了他们的对话以及有dl友情提供了一个做法
鬼谷子问题
mPng
Code
#include <set>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include<ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
const int N = 50005;
set<pair<int, int> > sum[405], mul[N];
int main () {
int n, m;
while (scanf("%d,%d", &n, &m) == 2) {
for (int i = 1; i <= n; i += 1)
for (int j = i + 1; j <= n; j += 1) if (i != j)
sum[i + j].insert(make_pair(i, j)),
mul[i * j].insert(make_pair(i, j));
int now_player = 1;
for (int i = 0; i < m; i += 1, now_player ^= 1) {
if (now_player & 1) {
for (int j = 1; j <= n + n; j += 1)
if (sum[j].size() == 1) {
pair<int, int> Pair = *sum[j].begin();
sum[j].erase(sum[j].begin());
mul[Pair.first * Pair.second].erase(mul[Pair.first * Pair.second].find(Pair));
}
} else {
for (int j = 1; j <= n * n; j += 1)
if (mul[j].size() == 1) {
pair<int, int> Pair = *mul[j].begin();
mul[j].erase(mul[j].begin());
sum[Pair.first + Pair.second].erase(sum[Pair.first + Pair.second].find(Pair));
}
}
}
int res = 0;
if (now_player)
for (int i = 1; i < n + n; i += 1)
if (sum[i].size() == 1) res += 1;
if (not now_player)
for (int i = 1; i < n * n; i += 1)
if (mul[i].size() == 1) res += 1;
for (int i = 1; i < n + n; i += 1) sum[i].clear();
for (int j = 1; j < n * n; j += 1) mul[j].clear();
printf("%d\n", res);
}
return 0;
}
MiCode108 猜数字的更多相关文章
- C语言猜数字游戏
猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手. 老程序猿就不要看了,黑呵呵 源代码1 include stdio.h include stdlib.h include ti ...
- 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II
好久没切 leetcode 的题了,静下心来切了道,这道题比较有意思,和大家分享下. 我把它叫做 "不一样的猜数字游戏",我们先来看看传统的猜数字游戏,Guess Number H ...
- java 猜数字游戏
作用:猜数字游戏.随机产生1个数字(1~10),大了.小了或者成功后给出提示. 语言:java 工具:eclipse 作者:潇洒鸿图 时间:2016.11.10 >>>>> ...
- 【原创Android游戏】--猜数字游戏Version 0.1
想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时 ...
- 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用
--------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...
- python学习笔记 ——python写的猜数字游戏 002
from sys import exit import random def Arrfor(str): #CONTST = CONTST + 1 artificial = input("请输 ...
- Python小游戏之猜数字
最近师兄师姐毕业,各种酒席,酒席上最常玩的一个游戏就是猜数字,游戏规则如下: 出题人在手机上输入一个0-100之间的数字,其它人轮流猜这个数字,如果你不幸猜中则要罚酒一杯.每次猜数字,出题人都要缩小范 ...
- 【Qt】2.4 做一个“猜数字”的游戏
使用对话框和Qt设计师来实现一个相当简单的小游戏.同时将通过这个程序来看布局的隐藏和显示是如何来影响窗口界面的变化的. 新建一个Qt项目,把Qt Creator默认给的mainwindow.h.mai ...
- hihocoder 1169 猜数字
传送门 时间限制:10000ms 单点时限:5000ms 内存限制:256MB 描述 你正在和小冰玩一个猜数字的游戏.小冰首先生成一个长为N的整数序列A1, A2, …, AN.在每一轮游戏中,小冰会 ...
随机推荐
- BZOJ3571 & 洛谷3236:[HNOI2014]画框——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3571 https://www.luogu.org/problemnew/show/P3236 小T ...
- BZOJ4516:[SDOI2016]生成魔咒——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4516 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一 ...
- [Leetcode] gas station 气站
There are N gas stations along a circular route, where the amount of gas at station i isgas[i]. You ...
- HDOJ.1789 Doing Homework again (贪心)
Doing Homework again 点我挑战题目 题意分析 给出n组数据,每组数据中有每份作业的deadline和score,如果不能按期完成,则要扣相应score,求每组数据最少扣除的scor ...
- 浴谷夏令营例题Codeforces827DBest Edge Weight(三个愿望,一次满足~(大雾
这题在浴谷夏令营wyx在讲的最小生成树的时候提到过,但并没有细讲怎么写... 这题可以用三种写法写,虽然只有两种能过...(倍增/倍增+并查集/树链剖分 先跑出最小生成树,分类讨论,在MST上的边,考 ...
- 基于MeanShift的目标跟踪算法及实现
这次将介绍基于MeanShift的目标跟踪算法,首先谈谈简介,然后给出算法实现流程,最后实现了一个单目标跟踪的MeanShift算法[matlab/c两个版本] csdn贴公式比较烦,原谅我直接截图了 ...
- Human life FZU - 2295 最大权闭合子图(第一次遇到被教育了)
Xzz is playing a MMORPG "human life". In this game, there are N different skills. Some ski ...
- dubbo介绍以及创建
1.什么是dubbo? DUBBO是一个分布式服务框架(关于框架,其实就是配置文件加java代码),致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2 ...
- Moodle安装图解
Moodle安装图解 一. Moodle运行环境搭建 Moodle主要是在Linux上使用Apache, PostgreSQL/MySQL/MariaDB及 PHP 开发(LAMP平台). 1. ...
- JupyterHub的安装与配置——让Jupyter支持多用户
1.下载anaconda 打开https://www.continuum.io/downloads,找到自己要的版本 如:https://repo.anaconda.com/archive/Anaco ...