Codeforces_828
A.模拟,注意单人的时候判断顺序。
#include<bits/stdc++.h>
using namespace std; int n,a,b; int main()
{
ios::sync_with_stdio();
cin >> n >> a >> b;
int b1 = b,b2 = ,ans = ;
for(int i = ;i <= n;i++)
{
int x;
cin >> x;
if(x == )
{
if(a) a--;
else if(b1)
{
b1--;
b2++;
}
else if(b2) b2--;
else ans++;
}
else
{
if(b1) b1--;
else ans += ;
}
}
cout << ans << endl;
return ;
}
B.对于每个B点,更新最极端边界,确定最后的长宽,注意不用涂和不成立的情况。
#include<bits/stdc++.h>
using namespace std; int n,m;
string s[]; int main()
{
ios::sync_with_stdio();
cin >> n >> m;
for(int i = ;i <= n;i++)
{
cin >> s[i];
s[i] = ' '+s[i];
}
int l = ,r = ,h = ,d = ,cnt = ;
for(int i = ;i <= n;i++)
{
for(int j = ;j <= m;j++)
{
if(s[i][j] == 'W') continue;
cnt++;
l = min(l,j);
r = max(r,j);
h = max(h,i);
d = min(d,i);
}
}
int ans = max(r-l+,h-d+);
if(ans <= )
{
cout << << endl;
return ;
}
if(ans > n || ans > m)
{
cout << - << endl;
return ;
}
cout << ans*ans-cnt << endl;
return ;
}
C.对于每一个串,选择更后面的起点更新。
#include<bits/stdc++.h>
using namespace std; char a[] = "";
int n; int main()
{
ios::sync_with_stdio();
cin >> n;
int len = ;
while(n--)
{
string s;
int x,now = ;
cin >> s >> x;
while(x--)
{
int xx;
cin >> xx;
int i = max(now,xx);
for(int j = i-xx;j < s.length();i++,j++)
{
len = max(len,i);
a[i] = s[j];
}
now = max(now,i);
}
}
for(int i = ;i <= len;i++)
{
if(a[i]) cout << a[i];
else cout << 'a';
}
cout << endl;
return ;
}
D.从一点个拉出k条链来,每条链长度尽可能相等。
#include<bits/stdc++.h>
using namespace std; int n,k; int main()
{
ios::sync_with_stdio();
cin >> n >> k;
int t = n-k-;
if(t%k == ) cout << +t/k* << endl;
else if(t%k == ) cout << +t/k*+ << endl;
else cout << +t/k*+ << endl;
int i;
for(i = n-;i >= max(n-k,);i--) cout << n << " " << i << endl;
for(;i >= ;i--) cout << i+k << " " << i << endl;
return ;
}
E.因为询问的串长最多为10,我们可以每个字母对应的长度都开个树状数组。
#include<bits/stdc++.h>
using namespace std; string s;
int q,tree[][][][] = {};
map<char,int> mp; inline int lowbit(int x)
{
return x&-x;
} void add(int x,int y,int z,int pos,int xx)
{
while(pos < s.length())
{
tree[x][y][z][pos] += xx;
pos += lowbit(pos);
}
} int getsum(int x,int y,int z,int pos)
{
int sum = ;
while(pos > )
{
sum += tree[x][y][z][pos];
pos -= lowbit(pos);
}
return sum;
} int main()
{
ios::sync_with_stdio();
cin >> s >> q;
s = ' '+s;
mp['A'] = ;
mp['G'] = ;
mp['C'] = ;
mp['T'] = ;
for(int i = ;i < s.length();i++)
{
for(int j = ;j <= ;j++) add(mp[s[i]],i%j,j,i,);
}
while(q--)
{
int x;
cin >> x;
if(x == )
{
string ss;
cin >> x >> ss;
for(int i = ;i <= ;i++) add(mp[s[x]],x%i,i,x,-);
for(int i = ;i <= ;i++) add(mp[ss[]],x%i,i,x,);
s[x] = ss[];
}
else
{
int l,r;
string ss;
cin >> l >> r >> ss;
int sum = ;
for(int i = ;i < ss.length()&&l+i <= r;i++) sum += getsum(mp[ss[i]],(l+i)%ss.length(),ss.length(),r)-getsum(mp[ss[i]],(l+i)%ss.length(),ss.length(),l-);
cout << sum << endl;
}
}
return ;
}
Codeforces_828的更多相关文章
随机推荐
- 用python做推荐系统(二)
一.简介 继上一篇基于用户的推荐算法,这一篇是要基于商品的,基于用户的好处是可以根据用户的评价记录找出跟他兴趣相似的用户,再推荐这些用户也喜欢的电影,但是万一这个用户是新用户呢?或是他还没有对任何电影 ...
- 交换机广播风暴,STP生成树协议,端口聚合
交换机(工作在数据链路层)具有学习功能: 一台刚重启的交换机上的mac地址表为空,根据数据包的来源,目的地来学习MAC地址与端口的映射关系映射关系,对于MAC地址表之中已有的就不管了,对未知端 ...
- 【python小随笔】python 解析xml数据的新手大坑>>抓取多重标签,遍历各标签的数据
xml文档: <GetMatchingProductResult ASIN="B071LF9R6G" status="Success">...< ...
- kubespy 用bash实现的k8s动态调试工具
原文位于 https://github.com/huazhihao/kubespy/blob/master/implement-a-k8s-debug-plugin-in-bash.md 背景 Kub ...
- 重拾c++第一天(1):环境配置
时过多年,c++基本不记得了,故在此记录相关重拾记录. 学习语言第一步当然是环境配置了(笑),由于暂无用c++进行大型项目开发的需求,所以先下载dev进行过渡. 安装过程非常简单,值得注意的是配置时选 ...
- 与drawable的较量(一)
前言 在android ui中drawable 是一个非常关键的要点,因为我们现在使用的花里胡哨的APP,都在胡里花哨的drawable 构建的. drawable,英文翻译为可拖拽的.说白了就是自己 ...
- React16源码解读:开篇带你搞懂几个面试考点
引言 如今,主流的前端框架React,Vue和Angular在前端领域已成三足鼎立之势,基于前端技术栈的发展现状,大大小小的公司或多或少也会使用其中某一项或者多项技术栈,那么掌握并熟练使用其中至少一种 ...
- Go 每日一库之 fsnotify
简介 上一篇文章Go 每日一库之 viper中,我们介绍了 viper 可以监听文件修改进而自动重新加载. 其内部使用的就是fsnotify这个库,它是跨平台的.今天我们就来介绍一下它. 快速使用 先 ...
- Excel大数据排查重复行内容方法,三步搞定!
首先第一步,我们找到一个空白列D输入公式“=A1&B1&C1”: 然后第二步,再选择下一空白列输入公式“=IF(COUNTIF(D:D,D1)>1,"重复", ...
- 轻松理解 Kubernetes 的核心概念
Kubernetes 迅速成为云环境中软件部署和管理的新标准. 与强大的功能相对应的是陡峭的学习曲线. 本文将提供 Kubernetes 的简化视图,从高处观察其中的重要组件,以及他们的关联. 硬件 ...