[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; ...
随机推荐
- Struts2+Hibernate实现图书管理系统
效果图 部分代码 Books.java package entity; import java.util.Date; public class Books { //书籍编号 private Strin ...
- perl HTML::LinkExtor模块(1)
use LWP::Simple; use HTML::LinkExtor; $html = get("http://www.baidu.com"); $link = HTML::L ...
- 自动化测试===unittest配套的HTMLTestRunner.py生成html报告源码
更改版: 全部复制,命名为 HTMLTestRunner.py 文件 #使用方法参见之前的文档:自动化测试===unittest和requests接口测试案例,测试快递查询api(二) " ...
- Development tools[重点]
Development tools yum groupinfo "Development tools" Loaded plugins: product-id, security, ...
- c++ ui 库
Dulib 比较流行的direct ui 界面框架 UIStone 据说金山词霸用着,查询资料甚少 DirectUI qq使用了据说,多学习学习吧 基于directUI的dulib不错 c盘没空间,运 ...
- sicily 1001. Fibonacci 2
1001. Fibonacci 2 Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn-1 + F ...
- HDU 6118 度度熊的交易计划 最大费用可行流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6118 题意:中文题 分析: 最小费用最大流,首先建立源点 s ,与超级汇点 t .因为生产一个商品需要 ...
- poj-1113
Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31419 Accepted: 10619 Descriptio ...
- 如何简单解释 MapReduce算法
原文地址:如何简单解释 MapReduce 算法 在Hackbright做导师期间,我被要求向技术背景有限的学生解释MapReduce算法,于是我想出了一个有趣的例子,用以阐释它是如何工作的. 例子 ...
- Zookeeper之Curator(1)客户端对节点的一些监控事件的api使用
<一>节点改变事件的监听 public class CauratorClientTest { //链接地址 private static String zkhost="172.1 ...