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哪里见了鬼了???”瞥了眼时间,无奈而迅速地关去所有其他窗口,临时打了一个缺省 ...
随机推荐
- iPhone How-to:如何调整UIView的Z-Order
转自:http://bj007.blog.51cto.com/1701577/541572 在界面设计中,最终用户看到的呈现通常是由不同层的视图组成的,通过控制视图的层次就可以实现不同的效果和功能.而 ...
- tracert路由跟踪工具使用方法
1. 路由跟踪在线Tracert工具说明 Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径.Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP ...
- 安装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 ...
- dp之01背包hdu3466(带限制的,当你所拥有的钱数大于某个限定值时才可以购买该物品)
题意:买东西,每个东西有三个特征值,p代表价格,q代表你手中钱必须不低于q才能买这个物品,v代表得到的价值. mark:又是变种01背包,每做一个变种的,就是一种提高.. 按照q - p以由大到小的顺 ...
- android版本号始终为1
之前用Eclipse里时,版本号是检查是做如下 <manifest xmlns:android="http://schemas.android.com/apk/res/android& ...
- Android——寄存器和存储器的区别
寄存器和存储器的区别 从根本上讲,寄存器与RAM的物理结构不一样. 一般寄存器是指由基本的RS触发器结构衍生出来的D触发, 就是一些与非门构成的结构,这个在数电里面大家都看过: 而RAM则有自己的 ...
- 使用导出导入(datapump)方式将普通表切换为分区表
随着数据库数据量的不断增长,有些表须要由普通的堆表转换为分区表的模式. 有几种不同的方法来对此进行操作,诸如导出表数据,然后创建分区表再导入数据到分区表:使用EXCHANGE PARTITION方式来 ...
- 关于ubuntu系统boot分区空间不足而又无法卸载旧内核的解决方法
2016年09月03日 14:16:45 萧氏一郎 阅读数:7802 标签: ubuntuboot分区清理更多 个人分类: linux 版权声明:本文为本猿原创文章,转载务必注明出处,多谢. ht ...
- div随页面滚动遇顶固定的两种方法(js&jQuery)
一.遇顶固定的例子 我一直以为是某个div或层随屏幕滚动,遇顶则固定,离开浏览器顶部又还原这样的例子其实不少,其实它的名字叫“层的智能浮动效果”.目前我们在国内的商业网站上就常常看到这样的效果了.例如 ...
- 多媒体开发之视频回放---dm642 做rtsp 视频回放功能
之前看过一款海康的视频录制和回放的ipnc 四路就是: 录制还是在本地电脑录制,通过插件在本地生成录制视频和snap图片, 回放估计就是按时间点生成的文件调用本地播放. http://m.blog.c ...