Codeforces Round #513-ABCD
ABC现场做出,涨了八十几分吧。D有点思路不知道怎么实现,赛后看题解发现巨简单,想得太复杂了。蓝瘦。
A----http://codeforces.com/contest/1060/problem/A
题意:给定n位数,问能组成多少电话号码。电话号码是一个以8位开头的11位数
思路:统计一下8的个数,计算一下n/11的个数,两者取较小值即为答案
#include <bits/stdc++.h>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<stdio.h>
#include<cstring>
#include<map> #define inf 0x3f3f3f3f
using namespace std;
typedef long long int LL; int n;
const int maxn = ;
int dig[]; int main()
{
while(scanf("%d", &n) != EOF){
char str[maxn];
scanf("%s", str);
memset(dig, , sizeof(dig));
int cnt = ;
for(int i = ; i < n; i++){
dig[str[i] - '']++;
cnt++;
} int ans = min(dig[], cnt / );
cout<<ans<<endl;
}
return ;
}
B---http://codeforces.com/contest/1060/problem/B
题意:给定一个n,要求两个数 a+b=n并且a的各数位之和和b的各数位之和相加是最大的,输出这个和
思路:有一个数一定是比n少一位的,全由9构成的数。
#include <bits/stdc++.h>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<stdio.h>
#include<cstring>
#include<map> #define inf 0x3f3f3f3f
using namespace std;
typedef long long int LL; LL n; int main()
{
while(scanf("%I64d", &n) != EOF){
int dig = ;
LL tmp = n;
while(tmp){
tmp /= ;
dig++;
} dig--;
int ans = dig * ;
tmp = n;
LL ten = ;
while(dig){
tmp -= ten * ;
ten *= ;
dig--;
}
while(tmp){
ans += tmp % ;
tmp /=;
}
printf("%d\n", ans);
}
return ;
}
C---http://codeforces.com/contest/1060/problem/C
题意:给定两个数组a和b,矩阵c(i,j) = ai * bj,求矩阵c的一个子矩阵使得子矩阵中所有元素和小于x,并且要让这个子矩阵的元素个数尽可能多
思路:c是不需要算出来的。找c的一个子矩阵相当于分别找a和b中连续的一段区间。
首先预处理出a和b中,连续的长度为i的区间之和最小的。asum[i]即为a数组中,连续的长度为i的总和最小的区间
因为要让元素个数尽可能多,那么就应该要找和最小值
然后分别枚举子矩阵的行数和列数,找到和小于x且元素个数最多的
#include <bits/stdc++.h>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<stdio.h>
#include<cstring>
#include<map> #define inf 0x3f3f3f3f
using namespace std;
typedef long long int LL; int n, m;
const int maxn = ;
LL a[maxn], b[maxn], x;
LL suma[maxn], sumb[maxn];
LL asum[maxn], bsum[maxn]; int main()
{
while(scanf("%d%d", &n, &m) != EOF){
memset(suma, , sizeof(suma));
memset(sumb, , sizeof(sumb));
for(int i = ; i <= n; i++){
scanf("%I64d", &a[i]);
suma[i] = suma[i - ] + a[i];
}
for(int i = ; i <= m; i++){
scanf("%I64d", &b[i]);
sumb[i] = sumb[i - ] + b[i];
}
scanf("%I64d", &x); memset(asum, inf, sizeof(asum));
memset(bsum, inf, sizeof(bsum));
for(int i = ; i <= n; i++){
for(int pos = i; pos <= n; pos++){
asum[i] = min(suma[pos] - suma[pos - i], asum[i]);
}
}
for(int i = ; i <= m; i++){
for(int pos = i; pos <= m; pos++){
bsum[i] = min(sumb[pos] - sumb[pos - i], bsum[i]);
}
} LL ans = ;
for(int i = n; i >= ; i--){
for(int j = m; j >= ; j--){
if(bsum[j] * asum[i] <= x){
if(i * j > ans){
ans = i * j;
}
}
}
} printf("%I64d\n", ans);
}
return ;
}
D---http://codeforces.com/contest/1060/problem/D
题意:有n个人坐成一圈 每个人都要求他的左边至少有a[i]个空位,右边有b[i]个空位。问要满足所有人的要求至少需要多少凳子。
思路:
现场的思路是所有人和空位之和。每次都找到左边空位最大的那个人,和右边空位最大的那个进行合并,总数就减去。合并之后相当于形成一个新的人。但是一时想不出来我形成新的人之后要怎么继续维护,难道每次都排序,肯定是不够的。
其实,合并并没有影响左边的数组和右边的数组。合并之后的左边和右边原来就在数组之中。
所以只需要先对a和b数组分别排序,每次取出a和b中的最大值。答案加上这两个最大之中的较大。最后答案加上n就行了。
#include <bits/stdc++.h>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<stdio.h>
#include<cstring>
#include<map> #define inf 0x3f3f3f3f
using namespace std;
typedef long long LL; int n;
const int maxn = 1e5 + ;
int a[maxn], b[maxn]; int main()
{
while(scanf("%d", &n) != EOF){
for(int i = ; i < n; i++){
scanf("%d%d", &a[i], &b[i]);
}
sort(a, a + n);
sort(b, b + n); LL ans = n;
for(int i = ; i < n; i++){
ans += max(a[i], b[i]);
}
printf("%I64d\n", ans);
}
return ;
}
Codeforces Round #513-ABCD的更多相关文章
- Codeforces Round #513 游记
Codeforces Round #513 游记 A - Phone Numbers 题目大意: 电话号码是8开头的\(1\)位数字.告诉你\(n(n\le100)\)个数字,每个数字至多使用一次.问 ...
- Codeforces Round #513 总结
首次正式的$Codeforces$比赛啊,虽然滚粗了,然而终于有$rating$了…… #A Phone Numbers 签到题,然而我第一次写挂了(因为把11看成8了……) 只需要判断一下有多少个 ...
- Codeforces Round #513 by Barcelona Bootcamp C. Maximum Subrectangle(双指针+思维)
https://codeforces.com/contest/1060/problem/C 题意 给两个数组,a数组有n个元素,b数组有m个元素,两个数组元素互相相乘形成n*m的矩阵,找一个子矩阵,元 ...
- Codeforces Round #513解题报告(A~E)By cellur925
我是比赛地址 A:Phone Numbers $Description$:给你一串数字,问你能组成多少开头为8的11位电话号码. $Sol$:统计8的数量,与$n$%11作比较. #include&l ...
- Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2) C D
C - Maximum Subrectangle 因为是两个数组相乘的到的 矩阵所以 a(i ->j)*b(x->y) 的面积 就是 a(i ->j) 的和乘与b(x-> ...
- Codeforces Round #513 by Barcelona Bootcamp
A. Phone Numbers 签. #include <bits/stdc++.h> using namespace std; #define N 110 char s[N]; ], ...
- Codeforces Round #513
A. Phone Numbers 题意:给一些数字,每个电话号码以8开头,11位,求最多组成多少个号码,重复累加. #include <bits/stdc++.h> using names ...
- [Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2) ](A~E)
A: 题目大意:给你一个数字串,每个数字只可以用一次,求最多可以组成多少个电话号码(可以相同),电话号码第一个数字为$8$,且长度为$11$ 题解:限制为$8$的个数和总长度,直接求 卡点:无 C++ ...
- Codeforces Round 513 (Div.1+Div.2)
比赛传送门 10月4号的比赛,因为各种原因(主要是懒),今天才写总结-- Div1+Div2,只做出两个题+迟到\(20min\),日常掉\(rating\)-- \(\rm{A.Phone\;Num ...
- Codeforces Round #513 (rated, Div. 1 + Div. 2)
前记 眼看他起高楼:眼看他宴宾客:眼看他楼坍了. 比赛历程 开考前一分钟还在慌里慌张地订正上午考试题目. “诶这个数位dp哪里见了鬼了???”瞥了眼时间,无奈而迅速地关去所有其他窗口,临时打了一个缺省 ...
随机推荐
- atitit.商业版 源码保护 与 java本地原生代码转换 的方案总结
atitit.商业版 源码保护 与 java本地原生代码转换 的方案总结 1. 为什么虚拟机语言容易被反编译 1 2. 源码泄露的问题问题 1 3. Excelsior JET 1 4. gcj.的流 ...
- 安装CentOS7后,无法联网,用yum安装软件提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法
无法联网的明显表现会有: 1.yum install出现 Error: cannot find a valid baseurl or repo:base 2.ping host会提示unknown h ...
- 批处理-IF详解
在CMD使用IF /?打开IF的系统帮助(自己看我就不全部列出来了),我们会发现IF有3种基本的用法! IF [NOT] ERRORLEVEL number command IF [NOT] stri ...
- excel 笔记
1.复制公式到整列(至文件尾): 当你想复制公式到整列(至文件尾)可选中有公式的单元格,待出现黑色填充柄时,双击即可
- Python教程:[43]Word基本操作
使用python操作Word用到了win32com模块,我们现在就要介绍一下python对Word的基本操作,文章涉及到如何与Word程序建立连接.如果与Word文档建立连接的,以及对Word文档的基 ...
- cocos2dx迷你地图
用CCRenderTexture就可以了,不知是否有更好的方法. if (!miniMap) { miniMap=CCSprite::create(); miniMap->setZOrder() ...
- linux内核对中断的处理方式
中断取代了轮询的通知方式,DMA取代了轮询的读写数据方式. 分类软件指令造成的中断(又叫异常,同步中断). svc, und, abt硬件通过中断请求信号造成的中断(异步中断). irq,fi ...
- Redis list 之增删改查
一.增加 1.lpush [lpush key valus...] 类似于压栈操作,将元素放入头部 127.0.0.1:6379> lpush plist ch0 ch1 ch2 (integ ...
- CSS3制作文字半透明倒影效果
效果如图.Ps.背景线条是背景图勒,和本文效果无关... html代码如下: <div class="content"> <h3 title="专业 ...
- python中的列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, ...