CODE FESTIVAL 2016 qual B

A - Signboard

……

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define MAXN 100005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 +c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
string s = "CODEFESTIVAL2016",t;
void Solve() {
cin >> t;
int ans = 0;
for(int i = 0 ; i < s.length() ; ++i) {
if(s[i] != t[i]) ++ans;
}
out(ans);enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
return 0;
}

B - Qualification simulator

……

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define MAXN 100005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 +c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
int N,A,B;
char s[MAXN];
void Solve() {
read(N);read(A);read(B);
scanf("%s",s + 1);
int r = 1,all = 0;
for(int i = 1 ; i <= N ; ++i) {
if(s[i] == 'a') {
if(all < A + B) {puts("Yes");++all;}
else puts("No");
}
else if(s[i] == 'b') {
if(all < A + B && r <= B) {puts("Yes");++all;++r;}
else puts("No");
}
else {
puts("No");
}
}
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
return 0;
}

C - Gr-idian MST

找到p和q中还没用的最小的一个

如果用的是p,q已经用了k个,这个p值能用的就是\(H - k + 1\)这么多

用的是q同理

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define MAXN 100005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 +c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
int W,H;
int64 p[MAXN],q[MAXN],ans;
int id[2][MAXN],c[2];
void Solve() {
read(W);read(H);
for(int i = 0 ; i < W ; ++i) {
id[0][i] = i;
read(p[i]);
}
for(int i = 0 ; i < H ; ++i) {
id[1][i] = i;
read(q[i]);
}
sort(id[0],id[0] + W,[](int a,int b){return p[a] < p[b];});
sort(id[1],id[1] + H,[](int a,int b){return q[a] < q[b];});
int p1 = 0,p2 = 0;
for(int i = 1 ; i <= W + H ; ++i) {
if(p2 >= H || (p1 < W && p[id[0][p1]] < q[id[1][p2]])) {
ans += 1LL * (H - c[1] + 1) * p[id[0][p1]];
++p1;++c[0];
}
else {
ans += 1LL * (W - c[0] + 1) * q[id[1][p2]];
++p2;++c[1];
}
}
out(ans);enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
return 0;
}

D - Greedy customers

考虑到我们希望每个人用尽量小的东西填满它,且这个东西不能和之前出现过的大小相等

我们先用1把第一个人变成1,然后后面如果出现一个2,则我们扔的东西都要大于2

如果出现大于2的数,我们总有办法使这个数买了最多\(\lfloor \frac{x}{3} \rfloor\)的状态下

如果出现了3之后同理,如此贪心下去即可

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define MAXN 100005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 +c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
int N,a[MAXN];
void Solve() {
read(N);
for(int i = 1 ; i <= N ; ++i) {
read(a[i]);
}
int pre = 1;
int64 ans = a[1] - 1;a[1] = 1;
for(int i = 2 ; i <= N ; ++i) {
if(a[i] == pre + 1) pre++;
else {
ans += (a[i] - 1) / (pre + 1);
}
}
out(ans);enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
return 0;
}

E - Lexicographical disorder

这个我分析了一下,压缩后的树高应该是根号级别的,于是愉快的开始卡常,最后就剩三个点死活也过不去了

翻了一下题解,只要对于trie上每个点统计在某个字母小于另一个字母的情况下,某个点的儿子中的一个儿子是否小于另一个儿子

因为这种关系只有\(26 * 26\)所以存的下而且很快就过了。。

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define eps 1e-10
#define MAXN 100005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 +c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
struct node {
int to;string s;
};
vector<node> to[MAXN * 4];
int N,Q,Ncnt;
int ed[MAXN * 4],ans[MAXN],pri[30],siz[MAXN * 4],pla[MAXN];
int dp[MAXN * 4][26][26];
string str[MAXN],order;
void insert(int u,int id,int pos) {
if(pos == str[id].length()) {ed[u] = id;pla[id] = u;return;}
for(auto &t : to[u]) {
if(t.s[0] == str[id][pos]) {
int l = -1;
while(l + 1 < str[id].length() - pos && l + 1 < t.s.length()) {
if(str[id][pos + l + 1] == t.s[l + 1]) ++l;
else break;
}
if(l + 1 == t.s.length()) {
insert(t.to,id,pos + t.s.length());
return;
}
int nw = ++Ncnt;
to[nw].pb((node){t.to,t.s.substr(l + 1)});
t.to = nw;t.s = t.s.substr(0,l + 1);
if(l + 1 == str[id].length() - pos) {
ed[nw] = id;pla[id] = nw;
}
else {
to[nw].pb((node){++Ncnt,str[id].substr(pos + l + 1)});
ed[Ncnt] = id;
pla[id] = Ncnt;
}
return;
}
}
to[u].pb((node){++Ncnt,str[id].substr(pos)});
ed[Ncnt] = id;pla[id] = Ncnt;return;
}
void pre_Process(int u,int all) {
if(ed[u]) {ans[ed[u]] = all;siz[u]++;++all;}
for(auto t : to[u]) {
pre_Process(t.to,all);
siz[u] += siz[t.to];
} }
void Calc(int u) {
for(auto t : to[u]) {
memcpy(dp[t.to],dp[u],sizeof(dp[t.to]));
for(auto k : to[u]) {
if(t.to == k.to) continue;
dp[t.to][k.s[0] - 'a'][t.s[0] - 'a'] += siz[k.to];
}
}
for(auto t : to[u]) {
Calc(t.to);
}
}
void Solve() {
read(N);
Ncnt = 1;
for(int i = 1 ; i <= N ; ++i) {
cin >> str[i];
insert(1,i,0);
}
pre_Process(1,0);
Calc(1);
read(Q);
int k;
for(int i = 1 ; i <= Q ; ++i) {
read(k);cin >> order;
int res = 0;
for(int j = 0 ; j < 26 ; ++j) {
for(int t = j + 1 ; t < 26 ; ++t) {
res += dp[pla[k]][order[j] - 'a'][order[t] - 'a'];
}
}
out(res + ans[k] + 1);enter;
}
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
return 0;
}

【AtCoder】CODE FESTIVAL 2016 qual B的更多相关文章

  1. 【AtCoder】CODE FESTIVAL 2016 qual A

    CODE FESTIVAL 2016 qual A A - CODEFESTIVAL 2016 -- #include <bits/stdc++.h> #define fi first # ...

  2. 【AtCoder】CODE FESTIVAL 2016 qual C

    CODE FESTIVAL 2016 qual C A - CF -- #include <bits/stdc++.h> #define fi first #define se secon ...

  3. 【Atcoder】CODE FESTIVAL 2017 qual A D - Four Coloring

    [题意]给定h,w,d,要求构造矩阵h*w满足任意两个曼哈顿距离为d的点都不同色,染四色. [算法]结论+矩阵变换 [题解] 曼哈顿距离是一个立着的正方形,不方便处理.d=|xi-xj|+|yi-yj ...

  4. 【Atcoder】CODE FESTIVAL 2017 qual C D - Yet Another Palindrome Partitioning

    [题意]给定只含小写字母的字符串,要求分割成若干段使段内字母重组顺序后能得到回文串,求最少分割段数.n<=2*10^5 [算法]DP [题解]关键在于快速判断一个字符子串是否合法,容易发现合法仅 ...

  5. 【AtCoder】CODE FESTIVAL 2017 qual A

    A - Snuke's favorite YAKINIKU -- #include <bits/stdc++.h> #define fi first #define se second # ...

  6. 【AtCoder】CODE FESTIVAL 2017 qual B

    最近不知道为啥被安利了饥荒,但是不能再玩物丧志了,不能颓了 饥荒真好玩 A - XXFESTIVAL CCFESTIVAL #include <bits/stdc++.h> #define ...

  7. 【AtCoder】CODE FESTIVAL 2017 qual C

    A - Can you get AC? No #include <bits/stdc++.h> #define fi first #define se second #define pii ...

  8. 【AtCoder】CODE FESTIVAL 2017 Final

    A - AKIBA 模拟即可 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair ...

  9. Atcoder CODE FESTIVAL 2016 qual C 的E题 Encyclopedia of Permutations

    题意: 对于一个长度为n的排列P,如果P在所有长度为n的排列中,按照字典序排列后,在第s位,则P的value为s 现在给出一个长度为n的排列P,P有一些位置确定了,另外一些位置为0,表示不确定. 现在 ...

随机推荐

  1. 【概率论】4-1:随机变量的期望(The Expectation of a Random Variable Part I)

    title: [概率论]4-1:随机变量的期望(The Expectation of a Random Variable Part I) categories: - Mathematic - Prob ...

  2. Linux配置Tomcat8080端口 远程无法访问解决办法

    是因为Linux的防火墙没有开放8080端口 解决办法: /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT #开启8080端口  /sbin/ ...

  3. AcWing:241. 楼兰图腾(树状数组逆序对)

    在完成了分配任务之后,西部314来到了楼兰古城的西部. 相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(‘V’),一个部落崇拜铁锹(‘∧’),他们分别用V和∧的形状来代表各自 ...

  4. ROS机器人开发实践学习笔记2

    刚刚开始学习ROS,打算入机器人的坑了,参考教材是<ROS及其人开发实践>胡春旭编著 机械工业出版社 华章科技出品.本来以为可以按照书上的步骤一步步来,但是,too young to si ...

  5. Ubuntu14.04-OpenCV2和3共存相关设置

    文章转自:http://blog.csdn.net/a356337092/article/details/73529635 安装依赖项: sudo apt-get install build-esse ...

  6. elasticsearch _source

    默认地,Elasticsearch 在 _source 字段存储代表文档体的JSON字符串.和所有被存储的字段一样, _source 字段在被写入磁盘之前先会被压缩.这个字段的存储几乎总是我们想要的, ...

  7. SCRIPT438: 对象不支持“trim”属性或方法

    关于ie9以下不支持trim()方法 可以在自己封装的框架中加入如下.或直接调用也行. if(!String.prototype.trim) { String.prototype.trim = fun ...

  8. 如何永久激活(破解) IntelliJ IDEA 2018.2.2

    原 如何永久激活(破解) IntelliJ IDEA 2018.2.2 版权声明:本文为博主原创文章,转载不需要博主同意,只需贴上原文链接即可. https://blog.csdn.net/zhige ...

  9. Redis | 一文轻松搞懂redis集群原理及搭建与使用

    转载:https://juejin.im/post/5ad54d76f265da23970759d3 作者:SnailClimb 这里总结一下redis集群的搭建以便日后所需同时也希望能对你有所帮助. ...

  10. SVM算法总结

    svm算法通俗的理解在二维上,就是找一分割线把两类分开,问题是如下图三条颜色都可以把点和星划开,但哪条线是最优的呢,这就是我们要考虑的问题: 首先我们先假设一条直线为 W•X+b =0 为最优的分割线 ...