[PKUSC2018]主斗地(搜索+贪心)
首先如果对子和三张牌出现在解中,那么全拆成单张显然没有问题,顺子同理。于是真正有用的牌型就只有单牌、三带一、三带二、四带二了。
暴搜jry手中的牌,然后先搜出双方的大牌型(即三张、四张牌的个数),再枚举三张牌带了几个对子,剩下的三张牌和四张牌带的都是单牌。这些被带的对子和单牌是没有大小限制的,所以对于jry手中的牌,应尽量带掉大牌,网友应尽量带掉小牌,这样才能尽量存在解。
最后剩的都是单牌了,扫一遍判断是否合法即可,总的来说没有坑点。
#include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
using namespace std; const int N=;
int ans,g[],a[N],b[N],c[N],d[N],e[N];
char s[N]; int F(char c){ return (c>='' && c<='') ? c-'' : g[(int)c]; } bool work(int o,int p){
rep(i,,o){
int x=o+p-i,y=i;
rep(j,,) d[j]=c[j];
for (int j=; ~j; j--){
while (y && d[j]>=) d[j]-=,y--;
while (x && d[j]) d[j]--,x--;
}
if (x|y) continue;
rep(j,,) e[j]=a[j];
x=o+p-i,y=i;
rep(j,,){
while (y && e[j]>=) e[j]-=,y--;
while (x && e[j]) e[j]--,x--;
}
if (x|y) continue;
x=; bool flag=;
rep(j,,){
if (e[j]>x){ flag=; break; }
x+=d[j]-e[j];
}
if (!flag) return ;
}
return ;
} bool solve(int x,int o,int p,int q,int r){
if (x==) return !q && !r && work(o,p);
bool f;
if (c[x]>=){
c[x]-=; f=solve(x+,o,p+,q,r+); c[x]+=;
if (f) return ;
}
if (c[x]>=){
c[x]-=; f=solve(x+,o+,p,q+,r); c[x]+=;
if (f) return ;
}
if (a[x]>= && r){
a[x]-=; f=solve(x+,o,p,q,r-); a[x]+=;
if (f) return ;
}
if (a[x]>= && q){
a[x]-=; f=solve(x+,o,p,q-,r); a[x]+=;
if (f) return ;
}
return solve(x+,o,p,q,r);
} void dfs(int x,int s){
if (x==){ if (!s && solve(,,,,)) ans++; return; }
rep(i,,min(s,b[x])) c[x]=i,dfs(x+,s-i);
} int main(){
g['T']=,g['J']=,g['Q']=,g['K']=,g['A']=,g['']=,g['w']=,g['W']=;
scanf("%s",s);
rep(i,,) b[i]=; b[]=b[]=;
rep(i,,) a[F(s[i])]++,b[F(s[i])]--;
dfs(,); printf("%d\n",ans);
return ;
}
[PKUSC2018]主斗地(搜索+贪心)的更多相关文章
- [PKUSC2018]主斗地
暴搜 非常暴力的搜索,以至于我都不相信我能过. 方法是:暴力枚举所有牌型,然后暴力判断是否可行. 暴力枚举部分: 非常暴力: void dfs(int x,int l){ if(l==0){ flag ...
- [CQOI2012]模拟工厂 题解(搜索+贪心)
[CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...
- Loj#6434「PKUSC2018」主斗地(搜索)
题面 Loj 题解 细节比较多的搜索题. 首先现将牌型暴力枚举出来,大概是\(3^{16}\)吧. 然后再看能打什么,简化后无非就三种决策:单牌,\(3+x\)和\(4+x\). 枚举网友打了几张\( ...
- 「PKUSC2018」主斗地(暴搜)
这道斗地主比 \(PKUWC\) 那道可做多了... 我们用 \(NOIP\) 那道斗地主的思路:暴搜出三代和四代,贪心出散牌. 还有jry为什么要出xx网友而不出他的另一个老婆 我们发现两个人的每回 ...
- 【LOJ】#6434. 「PKUSC2018」主斗地
题解 什么,我这题竟然快到了LOJ rk1???? 搜起来有点麻烦,不过感觉还是比斗地主好下手(至今没敢写斗地主 首先是暴力搜牌型,最多\(3^{16}\)(什么判解还要复杂度怂成一团)的样子?? 然 ...
- HDU 6034---Balala Power!(搜索+贪心)
题目链接 Problem Description Talented Mr.Tang has n strings consisting of only lower case characters. He ...
- [NOIP 2010]饮水入城 搜索+贪心
考试的时候写了个dfs找出来了,最后处理的时候想到了贪心,但是正确性没有想通.然后想了想动规,也没想通.最后没办法,用状态的话用了个状压,弄了40分. 正解是bfs+贪心.Dfs也有过的. 下面题解引 ...
- 洛谷 2668&2540 斗地主——搜索+贪心+dp
题目:https://www.luogu.org/problemnew/show/P2540 发现如果没有顺子,剩下的可以贪心.所以搜索顺子怎么出,然后贪心. 这样只能过不加强版.原因是贪心的时候难以 ...
- SPOJ:Strange Waca(不错的搜索&贪心&剪枝)
Waca loves maths,.. a lot. He always think that 1 is an unique number. After playing in hours, Waca ...
随机推荐
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第6节 SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener_24、深入SpringBoot过滤器和Servlet配置过滤器
笔记 1.深入SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战(核心知识) 简介:讲解SpringBoot里面Filter讲解和使用Servle ...
- java泛型--问号?和T或E或K或V的区别
所谓泛型,就是在定义类.接口.方法.参数或成员变量的时候,指定它们操作对象的类型为通用类型. 使用 尖括号 <> 操作符 (The diamond operator )表示泛型, 尖括号内 ...
- 谷歌官方 构建您的第一个应用 Kotlin版
https://developer.android.google.cn/training/basics/firstapp MainActivity.kt package com.example.myf ...
- IDEA 修改某个Module名称
一.选择module右键——>Refactor——>Rename 二.修改该module下的pom.xml文件对应module名改掉 三.修改项目的pom文件中modules里的modul ...
- Python3基础 str : 字符串的逆序
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- ROS tf基础使用知识
博客参考:https://www.ncnynl.com/archives/201702/1306.html ROS与C++入门教程-tf-坐标变换 说明: 介绍在c++实现TF的坐标变换 概念: Co ...
- 泡泡一分钟:Fast and Robust Initialization for Visual-Inertial SLAM
张宁 Fast and Robust Initialization for Visual-Inertial SLAM链接:https://pan.baidu.com/s/1cdkuHdkSi9x7l ...
- python flask框架学习(三)——豆瓣微信小程序案例(一)templates的使用,宏的使用,前端后台传数据,前端写python语句
目录 一.templates的使用 (1)在templates里创建一个index.html (2)再在app.py里写 (3)展示效果 二.构建第一个电影评分 (1)准备好素材放进static里的i ...
- Python - Django - 装饰器版的登陆校验
urls.py: from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^login/', vi ...
- 【Leetcode_easy】994. Rotting Oranges
problem 994. Rotting Oranges 参考 1. Leetcode_easy_994. Rotting Oranges; 完