bzoj1028
模拟题:
枚举最后一张牌,枚举对子;
判断当前方案是否可行:用dp的思想考虑处理数字i的牌时,前i-1张牌已经全部打完,对于数字为i的牌,假设有现在还有num张,那么num%3张一定是通过和后面的两张打顺子打出去的,若后面两张的牌数<num%3,该方案不可行。处理完后,若数字为n和n-1的牌的数不为3的倍数,说明后两种牌打不出去,该方案也不可行
复杂度:O(n^3) 因为没有跑慢,我的常数写大了也过了
/**************************************************************
Problem: 1028
User: syh0313
Language: C++
Result: Accepted
Time:460 ms
Memory:1304 kb
****************************************************************/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
using
namespace
std;
int
n,m,a[3050],num[410],topt,now[410];
bool
f=0;
bool
ok()
{
memset
(num,0,
sizeof
num);
for
(
int
i=1;i<=topt;i++) num[a[i]]++;
for
(
int
dui=1;dui<=n;dui++)
if
(num[dui]>=2)
{
bool
ff=1;
for
(
int
i=1;i<=n;i++)
if
(i!=dui) now[i]=num[i];
else
now[i]=num[i]-2;
for
(
int
i=1;i<=n-2;i++)
if
(now[i])
{
int
dec=now[i]%3;
if
(now[i+1]<dec || now[i+2]<dec) {ff=0;
break
;}
now[i+1]-=dec; now[i+2]-=dec;
}
if
(now[n-1]%3!=0 || now[n]%3!=0) ff=0;
if
(ff)
return
1;
}
return
0;
}
int
main()
{
scanf
(
"%d%d"
,&n,&m); topt=3*m+2;
for
(
int
i=1;i<=3*m+1;i++)
scanf
(
"%d"
,&a[i]);
for
(
int
i=1;i<=n;i++)
{
a[topt]=i;
if
(ok())
printf
(
"%d "
,i),f=1;
}
if
(!f)
puts
(
"NO"
);
return
0;
}
- 虚拟化平台cloudstack(7)——新版本的调试
- 一行代码,Pandas秒变分布式,快速处理TB级数据
- 机器学习算法实现解析——word2vec源码解析
- 从零开始创建一个基于Go语言的web service
- 转--Golang项目邮件发送模块代码分享
- 虚拟化平台cloudstack(8)——从UI开始
- 使用oracle的大数据工具ODCH访问HDFS数据文件
- UWP基础教程 - XAML开篇
- UWP基础教程 - XAML依赖属性和附加属性
- GO语言学习:动态Web
- Golang 连接mssql sql server
- UWP基础教程 - XAML对象元素和属性
- UWP基础教程 - 禁用&开启截取应用屏幕
- Android开发中应该避免的内存泄露
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法