Hello 2019题解

题解 CF1097A 【Gennady and a Card Game】

map大法好qwq

枚举每一个的第\(1,2\)位判是否与给定的重复即可

# include <bits/stdc++.h>
std::map<char, int> m1, m2;
int main()
{
std::string s[6], str;
std::cin >> str;
for(int i = 1; i <= 5; i++)
std::cin >> s[i], m1[s[i][0]] = 1, m2[s[i][1]] = 1;
if(m1[str[0]] || m2[str[1]])
return printf("YES\n") * 0;
printf("NO\n");
return 0;
}

题解 CF1097B 【Petr and a Combination Lock】

\(dfs\)入门题,下一个

枚举每一个是正还是负,最后判能不能被\(360\)整除即可

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


# include <bits/stdc++.h> int n, flag, a[20], used[20]; inline void check()
{
int sum = 0;
for(int i = 1; i <= n; i++)
sum += a[i] * (used[i] ? (-1) : 1);
if(sum % 360 == 0)
flag = 1;
} void dfs(int x)
{
if(x == n + 1)
return (void) (check());
dfs(x + 1);
used[x] = 1;
dfs(x + 1);
used[x] = 0;
} int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
dfs(1);
printf(flag ? "YES" : "NO");
return 0;
}

题解 CF1097C 【Yuhao and a Parenthesis】

说起Yuhao,我就不得不提@BlueCat,想起了他旋转**的情景,明年,中美,两开花,关注

对于每个括号序列,我们都用栈预处理出它不能配对的部分

等等?什么叫不能配对的部分?

比如说序列\()())\),\())\)就是它不能配对的部分

然后把这个部分取反

就得到了如果要把这个序列弄成正确的需要的最简序列\(x_i\)

显然这个部分要放在当前串的前面或后面

但是我们有些时候发现这东西是假的

比如这个序列\())))((((\),它的匹配序列是\((((())))\),很明显放前或后都不行,那么这个串就废了

如果这个串没废,就把\(x_i\)的计数累加\(1\)

然后我们枚举每一个\(x_i\),将\(ans\)累加上\(\min{x_i,x_i取反}\)(取反只把一个括号序列中'('变成')',反之亦然)

注意这里有一个特判,如果有一个串本来就是好的,那么统计答案时,由于空串的反串还是空串,所以答案会算两次

所以要特判出好串的个数\(cnt\)

最后输出\(ans/2+cnt/2\)即可(下取整)

#include <bits/stdc++.h>

const int MaxN = 100010, MaxM = 500010;

std::string s[MaxN], str[MaxN];
std::map<std::string, int> m; inline std::string change(std::string s)
{
int len = s.length();
std::string tmp = "";
for (int i = 0; i < len; i++)
tmp += ((s[i] == '(') ? ')' : '(');
return tmp;
} inline int check1(std::string s)
{
std::stack<char> st;
int len = s.length();
for (int i = 0; i < len; i++)
{
if (s[i] == '(')
st.push('(');
else if (s[i] == ')' && st.empty())
return 0;
else
st.pop();
}
return 1;
} inline void check(int x, std::string s)
{
std::vector<char> st;
int len = s.length();
for (int i = 0; i < len; i++)
{
if (st.empty())
{
st.push_back(s[i]);
continue;
}
if (s[i] == '(')
st.push_back('(');
else if (s[i] == ')' && st.back() == '(')
st.pop_back();
else if (s[i] == ')' && st.back() == ')')
st.push_back(')');
}
std::string tmp = "";
for (int i = 0; i < st.size(); i++)
tmp += ((st[i] == '(') ? ')' : '(');
if (check1(tmp + s) || check1(s + tmp))
++m[tmp];
// std::cout << " " << s << " " << tmp << "\n";
} int main()
{
int n, ans = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
std::cin >> s[i], check(i, s[i]);
for (std::map<std::string, int>::iterator it = m.begin(); it != m.end(); ++it)
{
if (it->first == "")
continue;
ans += std::min(it->second, m[change(it->first)]);
}
printf("%d\n", (ans / 2) + (m[""] / 2));
return 0;
}

Hello 2019题解的更多相关文章

  1. ICPC World Finals 2019 题解

    [A]Azulejos 题意简述: 有两排瓷砖,每排都有 \(n\) 个,每个瓷砖有高度 \(h_i\) 和价格 \(p_i\) 两种属性. 你需要分别重新排列这两排瓷砖,使得同一排的瓷砖满足价格不降 ...

  2. Code Chef February Challenge 2019题解

    传送门 \(HMAPPY2\) 咕 话说这题居然卡\(scanf\)的么??? int T;cin>>T; while(T--){ cin>>n>>a>> ...

  3. CodeChef March Challenge 2019题解

    传送门 \(CHNUM\) 显然正数一组,负数一组 for(int T=read();T;--T){ n=read(),c=d=0; fp(i,1,n)x=read(),x>0?++c:++d; ...

  4. Code Chef April Cook-Off 2019题解

    传送门 \(PEWDSVTS\) 我哪根筋不对了要把所有可行的拿出来\(sort\)一下--还有忘开\(long\ long\)真的好难受-- int main(){ // freopen(" ...

  5. Atcoder Tenka1 Programmer Contest 2019 题解

    link 题面真简洁 qaq C Stones 最终一定是连续一段 . 加上连续一段 # .直接枚举断点记录前缀和统计即可. #include<bits/stdc++.h> #define ...

  6. Atcoder Tenka1 Programmer Contest 2019题解

    传送门 \(C\ Stones\) 最后肯定形如左边一段白+右边一段黑,枚举一下中间的断点,预处理一下前缀和就可以了 int main(){ // freopen("testdata.in& ...

  7. Code Chef January Challenge 2019题解

    传送门 \(div2\)那几道题不来做了太水了-- \(DPAIRS\) 一个显然合法的方案:\(A\)最小的和\(B\)所有连,\(A\)剩下的和\(B\)最大的连 算了咕上瘾了,咕咕咕 const ...

  8. CodeChef April Challenge 2019题解

    传送门 \(Maximum\ Remaining\) 对于两个数\(a,b\),如果\(a=b\)没贡献,所以不妨假设\(a<b\),有\(a\%b=a\),而\(b\%a<a\).综上, ...

  9. AtcoderExaWizards 2019题解

    传送门 \(A\ Regular\ Triangle\) 咕咕 \(B\ Red\ or\ Blue\) 咕咕咕 \(C\ Snuke\ the\ Wizard\) 我可能脑子真的坏掉了-- 容易发现 ...

随机推荐

  1. Vue使用指南(一)

    Vue Vue:前台框架 渐进式JavaScript框架 渐进式:vue可以控制页面的一个局部,vue也可以控制整个页面,vue也能控制整个前端项目     -- 根据项目需求,来决定vue控制项目的 ...

  2. 错误 4 error C2039: “Sleep”: 不是“boost::this_thread”的成员

    检查是否是在x64下运行的. #include <pcl/io/openni2_grabber.h> #include <pcl/visualization/cloud_viewer ...

  3. glance

    第二篇glance— 镜像服务 一.glance介绍:              Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供 ...

  4. 【转载】 腾讯云通过设置安全组禁止某些IP访问你的服务器

    有时候我们在运维网站的过程中会发现一些漏洞扫描者的IP信息,或者个人爬虫网站的IP信息,此时我们想禁止掉这些IP访问到你的服务器,可以通过腾讯云的安全组功能来设置禁止这些IP访问你的服务器,也可以通过 ...

  5. nginx关闭日志功能access_log关闭

    网上一堆错误示例,我就不吐槽了,未经验证的各种关闭配置.emmm.... 错误示例: error_log off ; access_log on; 以上这些会产生名字为 off/on 的日志文件... ...

  6. 在vue项目中使用live2d

    成品如图: 那么几步简单说明怎么用吧: 第一,先去github上下载相应的静态资源: https://github.com/xiazeyu/live2d-widget-models 第二,将packg ...

  7. 使用 JS 来动态操作 css ,你知道几种方法?

    JavaScript 可以说是交互之王,它作为脚本语言加上许多 Web Api 进一步扩展了它的特性集,更加丰富界面交互的可操作性.这类 API 的例子包括WebGL API.Canvas API.D ...

  8. hibernate saveorupdate方法只有更新有效果,保存没有效果

    转自:https://blog.csdn.net/KAIXINLUOYE/article/details/72821014 单主键生成策略由native改成assigned后,问题解决.

  9. fatfs源码阅读

    使用fatfs文件的第一步,就是调用F_mount函数注册一个工作空间. F_mount函数的原型如下: 第一个参数根据网上大神的答复,是外设类型,如果是sd卡就是0,flash等等其他的外设就是其他 ...

  10. WinServer-SMTP服务

    摘要 SMTP服务是用来发送邮件的,常用于代码中发送邮件,不能接收.本章介绍SMTP服务的安装,配置. 搭建F5负载均衡集群注意事项: 1.集群不能与exchang在同网段,否则发不出邮件. 2.AP ...