[Codeforces #211] Tutorial
Link:
一套非常简单的题目,但很多细节都是错了一次才能发现啊……
还是不能养成OJ依赖症,交之前先多想想corner case!!!
A:
模拟,要特判0啊
#include <bits/stdc++.h> using namespace std;
#define X first
#define Y second
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
int n;
void solve(int x)
{
if(x<) printf("O-|");
else printf("-O|");
if(x>=) x-=;
for(int i=;i<=x;i++) printf("O");
printf("-");
for(int i=;i<=-x;i++) printf("O");
puts("");
} int main()
{
scanf("%d",&n);
if(!n) solve();//特判0!
while(n) solve(n%),n/=;
return ;
}
Problem A
B:
模拟,范围是$1.5*1e5$!!!仔细读题啊
#include <bits/stdc++.h> using namespace std;
#define X first
#define Y second
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
int n,k,cur,dat[];P res;
//范围是1.5*1e5!
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++) scanf("%d",&dat[i]);
for(int i=;i<=k;i++) cur+=dat[i];
res.X=;res.Y=cur;
for(int i=;i<=n-k;i++)
{
cur-=dat[i];cur+=dat[i+k];
if(res.Y>cur) res.Y=cur,res.X=i+;
}
printf("%d",res.X);
return ;
}
Problem B
C:
string.erase和vector.erase一样,尽量不要用
期望复杂度是$O(n)$级别的
此题为了支持删除我还手写了个链表……
其实不用两次扫描+删除+输出,只要扫一遍,边扫边判断当前字母能否加入答案就行了
#include <bits/stdc++.h> using namespace std;
#define X first
#define Y second
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
const int MAXN=2e5+;
char s[MAXN];int len,k,nxt[MAXN]; int main()
{
scanf("%s",s+);len=strlen(s+);
for(int i=;i<=len;i++) nxt[i]=i+;
k=;nxt[len+]=len+;
while(nxt[nxt[k]]!=len+)
if(s[k]==s[nxt[k]]&&s[nxt[k]]==s[nxt[nxt[k]]])
nxt[k]=nxt[nxt[k]];
else k=nxt[k];
k=;
while(nxt[nxt[nxt[k]]]!=len+)
if(s[k]==s[nxt[k]]&&s[nxt[nxt[k]]]==s[nxt[nxt[nxt[k]]]])
nxt[nxt[k]]=nxt[nxt[nxt[k]]];
else k=nxt[k];
k=;
while(k!=len+) printf("%c",s[k]),k=nxt[k];
return ;
}
Problem C
D:
答案的可行性具有单调性,明显可以二分
由于使用自己的钱数为$a-\sum p_i$,和哪些人参与购买无关
因此每次判断时可以采取贪心的策略
1、选择拥有钱数最多的$k$个人和价格最低的$k$个车购买
2、为了使额外挪用的钱数不超过$a$,人和车从小到大排序后一一对应明显是最优的选择
最后要特判$\sum p_i\le a$的情况,此时直接减会出现负数,因此要用最终答案和0取max!!!
#include <bits/stdc++.h> using namespace std;
#define X first
#define Y second
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
const int MAXN=1e5+;
int n,m,a,p[MAXN],b[MAXN];ll pre[MAXN]; bool check(int x)
{
ll sum=;
for(int i=;i<=x;i++)
if(b[n-x+i]<p[i]) sum+=p[i]-b[n-x+i];
return sum<=a;
} int main()
{
scanf("%d%d%d",&n,&m,&a);
for(int i=;i<=n;i++) scanf("%d",&b[i]);
for(int i=;i<=m;i++) scanf("%d",&p[i]);
sort(b+,b+n+);sort(p+,p+m+);
for(int i=;i<=m;i++) pre[i]=pre[i-]+p[i]; int l=,r=min(m,n);
while(l<=r)
{
int mid=(l+r)>>;
if(check(mid)) l=mid+;
else r=mid-;
}//答案一定要记得取MAX!
printf("%d %d",r,max(pre[r]-a,0ll));
return ;
}
Problem D
E:
貌似题解出锅了……
后面再填吧,其实就是一个预处理+暴力枚举
[Codeforces #211] Tutorial的更多相关文章
- [Codeforces #172] Tutorial
Link: Codeforces #172 传送门 A: 一眼看上去分两类就可以了 1.每个矩形只有两条边相交,重合的形状为菱形 2.每个矩形四条边都有相交 对于情况1答案为$h*h/sin(a)$ ...
- [Codeforces #514] Tutorial
Link: Codeforces #514 传送门 很简单的一场比赛打崩了也是菜得令人无话可说…… D: 一眼二分,发现对于固定的半径和点,能包含该点的圆的圆心一定在一个区间内,求出区间判断即可 此题 ...
- [Codeforces #210] Tutorial
Link: Codeforces #210 传送门 A: 贪心,对每个值都取最大值,不会有其他解使答案变优 #include <bits/stdc++.h> using namespace ...
- [Codeforces #196] Tutorial
Link: Codeforces #196 传送门 A: 枚举 #include <bits/stdc++.h> using namespace std; #define X first ...
- [Codeforces #174] Tutorial
Link: Codeforces #174 传送门 A: 求原根的个数,有一条性质是原根个数为$\phi(\phi(n))$,多了一个不会证的性质 如果要确定哪些是原根的话还是要枚举,不过对于每个数不 ...
- [Codeforces #190] Tutorial
Link: Codeforces #190 传送门 A: 明显答案为$n+m-1$且能构造出来 #include <bits/stdc++.h> using namespace std; ...
- [Codeforces #192] Tutorial
Link: Codeforces #192 传送门 前两天由于食物中毒现在还要每天挂一天的水 只好晚上回来随便找套题做做找找感觉了o(╯□╰)o A: 看到直接大力模拟了 但有一个更简便的方法,复杂度 ...
- [Codeforces #201] Tutorial
Link: 传送门 代码量很少的一套思维题 A: 试一试发现最后状态一定是所有$min,max$间$gcd$的倍数 直接判断数量的奇偶性即可 #include <bits/stdc++.h> ...
- [Codeforces #188] Tutorial
Link: Codeoforces #188 传送门 A: 先全转为正数,后面就全是指数级增长了 #include <bits/stdc++.h> using namespace std; ...
随机推荐
- Linux系统文件权限体系详解
准备工作:先简单了解Linux文件权限 在Linux系统中,ls -l 命令可以查看文件的权限,如 [zhaohuizhen@localhost Test]$ ls -l a -rw-rw-r--. ...
- Bagging和Boosting 概念及区别(转)
Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法.即将弱分类器组装成强分类器的方法. 首先介绍Boot ...
- python模块 zipfile
zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的zipfile里有两个非常重要的class, 分别是ZipFile和Zip ...
- [Leetcode Week15]Populating Next Right Pointers in Each Node
Populating Next Right Pointers in Each Node 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/populati ...
- linux子系统的初始化_subsys_initcall()【转】
转自:http://my.oschina.net/u/572632/blog/305492 目录[-] 概述 section的声明 注册 调用 IN BUILDING 概述 内核选项的解析完成之后,各 ...
- linux dpm机制分析(下)【转】
转自:http://blog.csdn.net/lixiaojie1012/article/details/23707901 1 设备注册到dpm_list路径 (Platform_devi ...
- selenium 点击浏览器按钮
利用以下的方法,selenium 也可以模拟点击各种浏览器按钮:browser.back()点击“返回”按钮.browser.forward()点击“前进”按钮.browser.refresh()点击 ...
- 解决sql server中批处理过程中“'CREATE/ALTER PROCEDURE 必须是查询批次中的第一个语句”
在批处理中加字段或表或视图或存储过程是否存在的判断 -----------------------------------------line----------------------------- ...
- 在Caffe中使用 DIGITS(Deep Learning GPU Training System)自定义Python层
注意:包含Python层的网络只支持单个GPU训练!!!!! Caffe 使得我们有了使用Python自定义层的能力,而不是通常的C++/CUDA.这是一个非常有用的特性,但它的文档记录不足,难以正确 ...
- jquery获取元素索引值index()的例子
如果参数是一组DOM元素或者jQuery对象,那么返回值就是传递的元素相对于原先集合的位置. 如果参数是一个选择器,那么返回值就是原先元素相对于选择器匹配元素中的位置.如果找不到匹配的元素,则返回-1 ...