layout: post
title: Codeforces Round 253 (Div. 2)
author: "luowentaoaa"
catalog: true
tags:
mathjax: true
- codeforces
- 模拟栈
- 贪心


传送门

A.Anton and Letters (签到)

题意

判断字符串里面有多少个不同字符

思路

直接set一下

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=2e5+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
set<char>st;
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);string s;getline(cin,s);int len=s.size();for(int i=0;i<len;i++){if(s[i]>='a'&&s[i]<='z')st.insert(s[i]);}cout<<st.size();return 0;
}

B.Kolya and Tandem Repeat (暴力模拟)

题意

给你一个字符串,你可以在末尾添加K个任意字符 ,让你找出一个最长的重复两次的字串

思路

直接暴力模拟

对于每个字串长度,字串起点,开始判断,复杂度n^3

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=2e5+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);string ss;cin>>ss;string s="";s+='*';s+=ss;int k;cin>>k;for(int i=0;i<k;i++){s+='*';}int ans=0;int len=s.size()-1;for(int i=1;i<len;i++){for(int j=1;j<len;j++){if(i+2*j-1>len)continue;int head=i,tail=i+j,flag=0;for(int k=1;k<=j;k++){if(s[head+k-1]=='*'||s[tail+k-1]=='*'||s[head+k-1]==s[tail+k-1])continue;flag=1;}if(!flag)ans=max(ans,j*2);}}cout<<ans;return 0;
}

C.Borya and Hanabi (大模拟,二进制模拟)

题意

现在有五种花色五种数字组成的二十五张牌,你手里有诺干张牌,每次你可以询问一种颜色和一种数字,你会得到所有这个花色/数字牌的位置,问你最少多少次可以把所有的牌分类

思路

把题目抽象成一个二维坐标,花色为横坐标,数字为纵坐标,每次可以连接一条线,把一条线上的牌找到,对于一张牌有两种找到方法,

1.这张牌被两条线连接,也就是花色和数字都固定了,

2.这张牌的其他花色或其他数字都被找到了,那么剩下的就只有他了

可以发现我们最多只要连接十条线,所以我们可以直接子集模拟一下十条线的搭配

然后暴力判断能否在这种情况分出任意两张牌

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=2e5+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
int x[maxn];
int y[maxn];
void who(string s,int i){char top=s[0];if(top=='B')x[i]=0;else if(top=='Y')x[i]=1;else if(top=='W')x[i]=2;else if(top=='G')x[i]=3;else x[i]=4;y[i]=s[1]-'1';
}
int n;
int bit(int i){return 1<<i;}
bool check (int sta) {for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(x[i]==x[j]){if( y[i]!=y[j] && (sta&bit(y[i]+5))==0&& (sta&bit(y[j]+5))==0  )return false;}else{if( (sta&bit(x[i])) || (sta&bit(x[j])) )continue;if(y[i]!=y[j] && ((sta&bit(y[i]+5)) || (sta&bit(y[j]+5)) ))continue;return false;}}}return true;
}
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);cin>>n;string s;for(int i=0;i<n;i++){cin>>s;who(s,i);}int ans=inf;for(int sta=0;sta<(1<<10);sta++){//cout<<bitset<11>(sta)<<endl;int num=0;for(int i=0;i<5;i++){if(sta&(1<<i)){num++;}if(sta&(1<<(i+5))){num++;}}if(check(sta))ans=min(ans,num);}cout<<ans<<endl;return 0;
}

D.Andrey and Problem(贪心)

题意

你有N个朋友,每个朋友都有百分之a[i]的几率给你出题,你现在只想要一道题,

想知道你选择哪些朋友给只出一题的几率最大,输出最大几率

例如 n=2

a1=0.1 a2=0.2

答案是 0.1×0.8 + 0.9×0.2=0.26

思路

一开始我是直接DP背包的然后发现错了,结果答案直接排序一下,暴力枚举就行了,我也不知道怎么证明...感觉很奇怪

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=5e4+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
double dp[maxn];int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);int n;cin>>n;double yes,no;for(int i=1;i<=n;i++)cin>>dp[i];sort(dp+1,dp+1+n,[](double a,double b){return a>b;});yes=dp[1],no=1.0-dp[1];for(int i=2;i<=n;i++){double nowyes,nowno;nowyes=dp[i]*(no)+(1-dp[i])*(yes);if(nowyes>yes){yes=nowyes;no=no*(1-dp[i]);}}cout<<fixed<<setprecision(10);cout<<yes;return 0;
}

E.Artem and Array (模拟栈,贪心)

题意

给你N个数,这N个数相邻,你每次可以删除一个数,然后得到这个数周围两个数的最小值,(如果有一边没有数字只能获得零值)让你求把这N个数全部删除的值

思路

在纸上模拟一下,如果要最优那就是一开始把小的都删除(等于的也要删除),最后留下的都是比较大的,会发现留下的数组是一个先递增再递减的数组,并且最大和第二大的值是相邻的无法取到,所以答案就是前面删除获取的值和后面剩下的数组的前n-2小的值

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=2e6+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
int n;
ll a[maxn];
ll ans;
ll st[maxn];
int top=0;
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);int n;cin>>n;for(int i=1;i<=n;i++){ll x;cin>>x;while(top>=2&&st[top-1]>=st[top]&&x>=st[top]){ans+=min(st[top-1],x);top--;}st[++top]=x;}sort(st+1,st+top+1);for(int i=1;i<=top-2;i++){ans+=st[i];}cout<<ans<<endl;return 0;
}

转载于:https://www.cnblogs.com/luowentao/p/10436404.html

Codeforces Round 253 (Div. 2)相关推荐

  1. Codeforces Round #253 (Div. 1) A. Borya and Hanabi 暴力

    A. Borya and Hanabi Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/442/p ...

  2. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  3. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  4. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  5. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  6. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  7. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  8. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  9. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  10. Codeforces Round #699 (Div. 2) (A ~ F)6题全,超高质量良心题解【每日亿题】2021/2/6

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) (A.B.C)[每日亿题]2021/2/ ...

最新文章

  1. oracle中decode函数用法及应用
  2. [LeetCode 题解]: Rotate List
  3. python 类方法 静态方法_python中类方法、类实例方法、静态方法的使用与区别
  4. python教程:filter,map,reduce
  5. matlab连续信号离散化_MATLAB开发自动驾驶第八课-控制信号帧的回放以进行标签化处理...
  6. 【数据结构与算法】之深入解析二叉树的算法实现和递归套路深度实践
  7. cnn stride and padding_Pytorch实现神经网络CNN案例
  8. 解决p4c安装时protobuf未定义引用的错误
  9. 计算机网络(第八版) 谢希仁——知识点
  10. Django超市仓库管理系统
  11. linux下声卡配置文件,Linux如何设置声卡
  12. 知识变现海哥:如何利用自己的时间和知识获得财富自由
  13. win10网络诊断为DNS服务器未响应,Windows10网络诊断DNS服务器未响应的解决办法
  14. Mac Android Studio Flutter环境配置之第一个Futter项目
  15. lab2 binary bomb 详解
  16. 名帖30 东汉 隶书《西岳华山庙碑》
  17. UltraEdit最新版v27软件下载 程序员必用高级文本编辑器
  18. 计算机一些专业术语,计算机专业术语大全
  19. 从Node.js访问文件系统
  20. vc中操作INI文件函数

热门文章

  1. python实现递归和非递归求两个数最大公约数、最小公倍数
  2. python os模块大全
  3. python3.8安装pygame_Python3.8安装Pygame很难?新萌也能轻松搞定安装并运行游戏
  4. Mysiam锁模式 innodb锁模式 是什么区别
  5. python java go 区别 一句话概括
  6. 【Django 2021年最新版教程16】pycharm model模型修改之后如何同步更新到mysql数据库
  7. kubernetes视频教程笔记 (7)-安装Harbor私有仓库
  8. Docker教程小白实操入门(18)--如何挂载和共享数据卷
  9. 基于SSM的MSDN资源发布网站
  10. java中max的意义_[Java] xms xmx XX:PermSize XX:MaxPermSize 参数意义解析