补题

codeforces 918C

题意

给定一个含有通配符?()的字符串,问有多少子串是括号匹配的

解题思路

首先考虑不用栈求括号匹配的方法:

bool solve(char* s)
{int top=0;for (int i=0;i<strlen(s);i++){if(s[i]=='(')   top++;else top--;if(top<0)   return false;}return top==0;
}

由于在使用栈的括号匹配算法中,栈内是不存在)的,所以不难证明这个算法和使用栈的括号匹配算法是等价的

我们维护一个\(top\)值的上确界\(sup\)和下确界\(inf\),如果维护过程\(inf<0\),那么对于所有后续的串的合法通配方案,都至少需要让这段的一个?变成(,我们不妨让下界变成\(0\)。那么每次串长度为偶数并且区间存在能组成\(0\)的方案(即\(inf=0\))即说明子串是可以括号匹配的

复杂度\(O(n^2)\)

AC代码

#include <bits/stdc++.h>
using namespace std;
char str[5020];
int main()
{scanf("%s",&str);int len=strlen(str);int ans=0;for (int i=0;i<len;i++){int sup=0,inf=0;for (int j=i;j<len;j++){if(str[j]=='(') inf++,sup++;else if(str[j]==')')    sup--,inf--;else inf--,sup++;if(sup<0)   break;if(inf<0)   inf=0;if((j-i+1)%2==0&&inf==0)    ans++;}}printf("%d\n",ans);
}

codeforces 918D

题意

给定一个有向无环图(\(DAG\)) \(G\),边上有用字母表示的权值,权值的大小关系由\(ASCII\)码决定。玩家\(A\)和\(B\)进行博弈,\(A\)先手,\(B\)后手,两名玩家各有一个棋子,每一轮将棋子从图上的一个点沿着有向边移动到另一个点,随后移动权转给另一名玩家。

规定:每一轮走的边的权值必须大于等于上一次走的权值

胜利条件:当有一名玩家无法走时,另一名玩家获得胜利

输出\(n\)行\(n\)列,其中\(n\)为图的点数,假设两名玩家都是绝对理性的,第\(i\)行\(j\)列输出获胜的玩家(\(A/B\))

\(n \le 100\)

解题思路

对于这类的组合游戏,我们可以知道:

一个状态是必败状态当且仅当它的所有后继都是必胜状态或者没有后继

一个状态是必胜状态当且仅当它至少又一个后继是必败状态

那么对于此题,我们不妨用dp[u][v][c]表示\(A\)在\(u\),\(B\)在\(v\),上一轮移动边的权值为\(c\)的状态,如果存在边\(e\),并且权值\(\ge c\),那么它可以转移到dp[v][e.to][e.c](等效于从\(B\)开始先手)

进而根据上面的准则判断这个状态是否是必胜/败状态即可,答案是dp[i][j][0]

实现上可以使用记忆化搜索

粗略估计最坏情况每次都要遍历一次图,复杂度\(O(n^4)\),实际的上界大概要再低一些,因为不可能每次都要遍历图

AC代码

#include <bits/stdc++.h>
using namespace std;
const int maxn=102;
struct edge
{int to,cost;edge(int t,int c):to(t),cost(c){}bool operator < (const edge &rhs) const{return cost<rhs.cost;}
};
vector <edge> G[maxn];
int dp[maxn][maxn][28];
int solve(int u,int v,int c)
{if(dp[u][v][c]!=-1)return dp[u][v][c];dp[u][v][c]=0;for (edge &e: G[u]){if(e.cost<c)    continue;dp[u][v][c]|=(!solve(v,e.to,e.cost));}return dp[u][v][c];
}
int main()
{int m,n;scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){int u,v;char c;scanf("%d%d",&u,&v);cin>>c;G[u].push_back(edge(v,c-'a'+1));}memset(dp,-1,sizeof(dp));for (int i=1;i<=n;i++){for (int j=1;j<=n;j++)if(solve(i,j,0))printf("A");elseprintf("B");puts("");}
}

转载于:https://www.cnblogs.com/falseangel/p/8394887.html

Codeforces Round #459 (Div. 2)题解相关推荐

  1. Codeforces Round #514 (Div. 2)题解

    Codeforces Round #514 (Div. 2)题解 A 喵,直接模拟. B 枚举所有盖章时的,合法的,左上角的位置.能盖的话就盖一下.最后check一下图案是否相等即可 C 一轮一轮的扔 ...

  2. Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp

    Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...

  3. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  4. 【算法题解】Codeforces Round #817 (Div. 4)题解

    文章目录 Codeforces Round #817 (Div. 4)题解 A. Spell Check B. Colourblindness C. Word Game D. Line E. Coun ...

  5. Codeforces Round #747 (Div. 2)题解

    Codeforces Round #747 (Div. 2)题解 (本博客将持续更新以后每场CF div2的题解,喜欢ACM.OI的小伙伴记得点个关注哟) 昨天夜晚刷网络流刷入迷了,渐渐就忘记了我还要 ...

  6. Codeforces Round #789 (Div. 2)题解

    Codeforces Round #789 (Div. 2)题解 A. Tokitsukaze and All Zero Sequence 原题链接 算法标签 贪心 排序 思路 情况一:数组存在零 → ...

  7. Codeforces Round #748 (Div. 3) 题解 完整A~G

    Codeforces Round #748 (Div. 3) 题解 A. Elections 题意 已知竞选中三个候选人的当前得票数 a , b , c a,b,c a,b,c,现在可以增加任何一个人 ...

  8. Codeforces Round #533 (Div. 2)题解

    link orz olinr AK Codeforces Round #533 (Div. 2) 中文水平和英文水平都太渣..翻译不准确见谅 T1.给定n<=1000个整数,你需要钦定一个值t, ...

  9. Codeforces Round #734 (Div. 3) 题解

    Hello大家好,今天给大家带来的是 Codeforces Round #734 (Div. 3) 的全题目讲解. 本文链接:https://www.lanqiao.cn/questions/2040 ...

最新文章

  1. python selenium自动化_python selenium自动化之-环境搭建
  2. C语言的本质(3)——整数的本质与运算
  3. 微信支付 php编程,PHP编程:微信支付开发交易通知实例
  4. java hibernate的使用_《Hibernate快速开始 – 4 – 使用JAVA持久层 API (JPA)教程》
  5. hdu 1536(博弈)
  6. SQL Server登录名,用户和安全标识符(SID)
  7. 如何才能不被社会淘汰?一个程序员的七年之痒
  8. python 小技巧之获取固定下面包含的某种类型文件的个数
  9. Asp.net MVC中如何实现依赖注入(DI)(二)
  10. 【MS SQL Server】SQL Server2005下载地址
  11. 小白如何搭建自己的网络服务器
  12. 深度清理C盘之非常有用
  13. Hack the box (HTB) Metatwo靶机
  14. slideUp()方法和slideDown()方法
  15. python的十句名言_程序员的二十句励志名言,看看你最喜欢哪句?
  16. php 发送带附件邮件
  17. 成为品牌「最大增量场」,是京东最好的「成人礼」
  18. postman时间参数化
  19. SAMSUNG三星70年之崛起与ECS精英的销售“铁三角”
  20. 曙光i620c20用户手册_技术白皮书I620-G20

热门文章

  1. java大整数_java处理大整数
  2. 九龙擒庄指标源码破译_擒庄系列:庄家难逃该指标,散户屡试不爽的秘籍!(附公式)...
  3. mybatis mysql 模糊查询_MyBatis Oracle、MySQL、DB2、SQLServer的like模糊查询
  4. 零基础开始学 Web 前端开发,有什么建议?(视频教程)
  5. 实用调试技巧 Debug Release F10 F11 初始化 越界访问 堆栈 模拟实现库函数
  6. matlab 基于小波变换的图像压缩,基于Matlab的小波变换在图像压缩中的应用
  7. maven java jar_如何去maven仓库下载jar包
  8. 如何更新Word文档的附图或附表序号
  9. Servlet之第一个web项目
  10. tensorflow里面函数记录