Codeforces Round #508 (Div. 2)

http://codeforces.com/contest/1038

A

 #include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define IT set<node>::iterator
#define sqr(x) ((x)*(x))
#define pb push_back
#define eb emplace_back
#define maxn 100005
#define eps 1e-8
#define pi acos(-1.0)
#define rep(k,i,j) for(int k=i;k<j;k++)
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll>pll;
typedef pair<ll,int> pli;
typedef pair<pair<int,string>,pii> ppp;
typedef unsigned long long ull;
const long long MOD=1e9+;
const double oula=0.57721566490153286060651209;
using namespace std; int a[]; int main(){
std::ios::sync_with_stdio(false);
int n,m;
string str;
cin>>n>>m>>str; for(int i=;i<n;i++){
a[str[i]-'A']++;
}
sort(a,a+);
int ans=0x3f3f3f3f;
int co=;
for(int i=;i>=;i--){ if(a[i]==) break;
ans=min(ans,a[i]);
co++;
}
if(co<m) cout<<;
else cout<<ans*co;
}

B

 #include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define IT set<node>::iterator
#define sqr(x) ((x)*(x))
#define pb push_back
#define eb emplace_back
#define maxn 100005
#define eps 1e-8
#define pi acos(-1.0)
#define rep(k,i,j) for(int k=i;k<j;k++)
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll>pll;
typedef pair<ll,int> pli;
typedef pair<pair<int,string>,pii> ppp;
typedef unsigned long long ull;
const long long MOD=1e9+;
const double oula=0.57721566490153286060651209;
using namespace std; int main(){
std::ios::sync_with_stdio(false);
int n;
cin>>n;
if(n==||n==){
cout<<"No"<<endl;
}
else{
cout<<"Yes"<<endl;
if(n&){
cout<<<<" "<<n<<endl;
cout<<n-;
for(int i=;i<n;i++) cout<<" "<<i;
}
else{
cout<<<<" "<<n/<<endl;
cout<<n-;
for(int i=;i<=n;i++){
if(i!=n/) cout<<" "<<i;
}
}
}
}

C

题意:有两个人,每人有n个数字,两个人轮流操作,有两种操作方式:1.去掉对方的一个数字 2.选择自己的一个数字加入自己的分数中

思路:排序后从大到小贪心比较两个人的分数,如果当前是A操作,且分数a[L]>b[R],A就选择操作2,否则选择操作1,B也一样

 #include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define IT set<node>::iterator
#define sqr(x) ((x)*(x))
#define pb push_back
#define eb emplace_back
#define maxn 100005
#define eps 1e-8
#define pi acos(-1.0)
#define rep(k,i,j) for(int k=i;k<j;k++)
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll>pll;
typedef pair<ll,int> pli;
typedef pair<pair<int,string>,pii> ppp;
typedef unsigned long long ull;
const long long MOD=1e9+;
const double oula=0.57721566490153286060651209;
using namespace std; int n;
ll a[],b[]; int main(){
std::ios::sync_with_stdio(false);
cin>>n;
for(int i=;i<=n;i++) cin>>a[i];
for(int i=;i<=n;i++) cin>>b[i];
sort(a+,a+n+);
sort(b+,b+n+);
ll ans1=,ans2=;
int L=n,R=n;
while(L&&R){
if(a[L]>b[R]){
ans1+=a[L];
L--;
if(L==){
ans2+=b[R];
R--;
}
else{
if(a[L]>b[R]){
L--;
}
else{
ans2+=b[R];
R--;
}
}
}
else{
R--;
if(R==){
L--;
}
else{
if(b[R]>a[L]){
ans2+=b[R];
R--;
}
else{
L--;
}
}
}
}
//cout<<L<<" "<<R<<endl;
while(L){
ans1+=a[L];
L-=;
}
while(R){
R--;
ans2+=b[R];
R--;
}
cout<<ans1-ans2<<endl;
}

D

题意:有n只动物,每只动物都有一个分数,每次一只动物可以吃掉左边或者右边动物,然后它的分数会减去被吃掉的动物的分数,问最后剩下的动物的分数的最大值是多少

思路:通过模拟可以发现一个规律:如果全是正数,最大值等于数值之和减去最小值的两倍,全是负数,最大值等于数值绝对值之和减去最大值的两倍,混合的情况等于数值的绝对值之和(感觉和今天的蓝桥杯后缀表达式那题思路有点像)

 #include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define IT set<node>::iterator
#define sqr(x) ((x)*(x))
#define pb push_back
#define eb emplace_back
#define maxn 100005
#define eps 1e-8
#define pi acos(-1.0)
#define rep(k,i,j) for(int k=i;k<j;k++)
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll>pll;
typedef pair<ll,int> pli;
typedef pair<pair<int,string>,pii> ppp;
typedef unsigned long long ull;
const long long MOD=1e9+;
const double oula=0.57721566490153286060651209;
using namespace std; int n;
ll a[]; int main(){
std::ios::sync_with_stdio(false);
ll sum=;
cin>>n;
ll Min=0x3f3f3f3f,Max=-0x3f3f3f3f;
for(int i=;i<n;i++){
cin>>a[i];
sum+=abs(a[i]);
Min=min(Min,a[i]);
Max=max(Max,a[i]);
}
if(n==) cout<<a[];
else if(n==) cout<<max(a[]-a[],a[]-a[]);
else{
if(Min>) sum-=*Min;
else if(Max<) sum+=*Max;
cout<<sum<<endl;
}
}

E

题意:你有n个砖头,每个砖头都有一个值且两端分别有一种颜色,如果两块砖头接触的端点颜色相同,就可以称这两块砖头为一个序列(你可以将一块砖头翻转),一个序列可能由多块砖头构成,序列的值为所构成的砖头的值之和,求所有情况下所有序列的最大值

思路:设 dp[i][j][x][y]表示用第i个到第j个之间的砖头构成一个序列,序列左端颜色为x,右端颜色为y

有三种情况:

1、使用中间的某些砖头dp[i][j][q][w]=max(dp[i][e][q][r]+dp[e+1][j][r][w])

2、将砖头端点的颜色反转dp[i][j][q][w]=max(dp[i][e][r][w]+dp[e+1][j][q][r])

3、不用中间的一部分砖头dp[i][j][q][w]=max(dp[i][e][q][w],dp[e+1][j][q][w])

 #include<bits/stdc++.h>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define IT set<node>::iterator
#define sqr(x) ((x)*(x))
#define pb push_back
#define eb emplace_back
#define maxn 100005
#define eps 1e-8
#define pi acos(-1.0)
#define rep(k,i,j) for(int k=i;k<j;k++)
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll>pll;
typedef pair<ll,int> pli;
typedef pair<pair<int,string>,pii> ppp;
typedef unsigned long long ull;
const long long MOD=1e9+;
const double oula=0.57721566490153286060651209;
using namespace std; int n;
int dp[][][][]; int main(){
std::ios::sync_with_stdio(false);
cin>>n;
memset(dp,-0x3f3f3f3f,sizeof(dp));
int a,b,c;
for(int i=;i<=n;i++){
cin>>a>>b>>c;
dp[i][i][a][c]=dp[i][i][c][a]=b;
}
int ans=;
for(int i=n;i;i--){
for(int j=i;j<=n;j++){
for(int q=;q<=;q++){
for(int w=;w<=;w++){
for(int e=i;e<=j+;e++){
dp[i][j][q][w]=max(dp[i][j][q][w],max(dp[i][e][q][w],dp[e+][j][q][w]));
for(int r=;r<=;r++){
dp[i][j][q][w]=max(dp[i][j][q][w],max(dp[i][e][r][w]+dp[e+][j][q][r],dp[i][e][q][r]+dp[e+][j][r][w]));
}
}
ans=max(ans,dp[i][j][q][w]);
}
}
}
}
cout<<ans<<endl;
}

Codeforces Round #508 (Div. 2)的更多相关文章

  1. Codeforces Round #508 (Div. 2) E. Maximum Matching(欧拉路径)

     E. Maximum Matching 题目链接:https://codeforces.com/contest/1038/problem/E 题意: 给出n个项链,每条项链左边和右边都有一种颜色(范 ...

  2. Codeforces Round #508 (Div. 2) D. Slime

    D. Slime 题目链接:https://codeforces.com/contest/1038/problem/D 题意: 给出两个数,然后每次可以对相邻的两个数合并,比如x,y,那么合并过后就是 ...

  3. [Codeforces Round #508 (Div. 2)][Codeforces 1038E. Maximum Matching]

    前几天给舍友讲这题的时候感觉挺有意思的,就贴上来吧... 题目链接:1038E - Maximum Matching 题目大意:有\(n\)个棒子,每个条两端有颜色\(c1,c2\)以及他的价值\(v ...

  4. Codeforces Round #508 (Div. 2) C D

    C: C - Gambling 给你两个数列  每一回合A可以选择从第一个序列里面选一个数或者清除第二个序列里面选一个数 同理B能从第二序列里面选数或者清除第一个序列里面一个数 然后 求A所选的数之和 ...

  5. 题解——Codeforces Round #508 (Div. 2) T3 (贪心)

    贪心的选取最优解 然后相减好 记得要开long long #include <cstdio> #include <algorithm> #include <cstring ...

  6. 题解——Codeforces Round #508 (Div. 2) T2 (构造)

    按照题意构造集合即可 注意无解情况的判断 #include <cstdio> #include <algorithm> #include <cstring> #in ...

  7. 题解——Codeforces Round #508 (Div. 2) T1 (模拟)

    依照题意暴力模拟即可A掉 #include <cstdio> #include <algorithm> #include <cstring> #include &l ...

  8. Codeforces 1038F Wrap Around (Codeforces Round #508 (Div. 2) F) 题解

    写在前面 此题数据量居然才出到\(n=40\)???(黑人问号)以下给出一个串长\(|S|=100,n=10^9\)的题解. 题目描述 给一个长度不超过\(m\)的01串S,问有多少个长度不超过\(n ...

  9. Codeforces Round #508 (Div. 2)【A,B,C,D】【实验室日常周赛训练】

    #include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f3f3f #define int long long ...

随机推荐

  1. e充电加密破解

    def encrypt(self,stationId ): keys = 'F29E0E39-98E4-F4CC318443' encrypt_obj = pyDes.triple_des(keys, ...

  2. AndroidStudio 开发JNI

    Android版本不断更新,发现网上很多JNI的教程,都不太适用了,会遇到各种问题,今天自己来总结一个. NDK下载 我们下载NDK,有两种下载方式: 这是Google官方下载 点击下载NDK: 通过 ...

  3. Unix/Linux进程间通信

    一,Linux下进程间通信的几种主要手段简介: 1,管道(Pipe)及有名管道(named pipe) 管道可用于具有亲缘关系进程间的通信 有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功 ...

  4. mysql 将行拼接成字符串的方法

    见代码: ;//保证可以拼接足够长的字符串,没它 数据量大时会截断结果1 group by videoType 效果如下:

  5. SpringBoot入门(0) HelloWorld的实现与原理分析

    SpringBoot(0) HelloWorld的实现与原理分析 一.环境准备 1.1 环境约束 –jdk1.8:Spring Boot 推荐jdk1.7及以上:java version “1.8.0 ...

  6. 阿里云ECS配置iptables

    在阿里云ECS安装flannel.docker.kubernetes后,在多个node运行docker run -it bash,然后ping互相的ip,发现docker容器间网络没通,发现宿主机的i ...

  7. [UE4]Widget Switcher:控件切换器

    一.Widget Switcher可以有很多子控件,但一次只会显示一个子控件.所有的子控件默认情况下都是充满整个Widget Switcher容器 二.Widget Switcher.Active W ...

  8. beef + msf 实现内网渗透

    在内网渗透方面,最为大众所知道的就是xp系统的ms08067漏洞,通过这个漏洞可以对未打上补丁的xp系统实现getshell, 但是经过笔者发现,这种漏洞攻击在被攻击机开上windows防火墙的时候是 ...

  9. 团队第三次 # scrum meeting

    github 本此会议项目由PM召开,召开时间为4-7日晚上9点 召开时长15分钟 任务表格 袁勤 继续学习SpringBoot https://github.com/buaa-2016/phyweb ...

  10. 白话RPC

    RPC,这个英文缩写在计算机专业里的意思是:Remote Procedure Call Protocol,远程过程调用协议,字面上的意思就是这个,不过还是有些懵逼. 下面就简单说明一下其内在原理,形象 ...