[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; ...
随机推荐
- C# SuperSocket 消息推送
服务端使用Nuget引用SuperSocket.WebSocket和SuperSocket.Engine 服务器端代码[控制台] using SuperSocket.WebSocket; using ...
- python调参神器hyperopt
一.安装 pip install hyperopt 二.说明 Hyperopt提供了一个优化接口,这个接口接受一个评估函数和参数空间,能计算出参数空间内的一个点的损失函数值.用户还要指定空间内参数的分 ...
- Python学习笔记 - day11 - Python操作数据库
MySQL的事务 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关,MySQL的两种引擎如下: 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID ...
- JS阶段测试
JS阶段测试 一.选择题 1.表单中的数据要提交到的处理文件由表单的( c )属性指定. A. method B. name C. action D. 以上都不对 2.在CSS样式 ...
- C++之参数总结
函数的形参为函数提供了已命名的局部存储空间,它是在函数的形参表中定义的,并由调用函数时传递给函数的实参初始化,而形参的 初始化与变量的初始化一样,如果形参具有非引用类型,则复制实参的值,如果形参为引用 ...
- Call Mode feature
起源 user 在插著 充電器 打電話的狀況下, 為了安全起見, 避免 充電器在這時損害手機,間接造成 user 的傷害, 而有了這 feature, 在 battery voltage Vbat & ...
- ORACLE导入Excel数据
首先建好一个和Excel表字段对应字段的表,然后 select t.* from 表名 t for update; 点击这个锁子,打开它 粘贴,然后 再提交事务即可
- Leetcode 之Largest Rectangle in Histogram(40)
又是一道构思巧妙的题,暴力求解复杂度太高,通过构造一个递增栈来解决:如果当前元素小于栈顶元素,则说明栈内已经构成一个 递增栈,则分别计算以每个元素为最低值的面积:反之,则入栈. int largest ...
- linux命令(3):rpm命令
查询当前环境是否已安装软件包,如下命令: [root@cloud ~]# rpm -qa | grep httpd httpd-2.4.6-31.el7.centos.1.x86_64 httpd-t ...
- 微信小程序实战篇-下拉刷新与加载更多
下拉刷新 实现下拉刷新目前能想到的有两种方式 1. 调用系统的API,系统有提供下拉刷新的API接口 2. 监听scroll-view,自定义下拉刷新,还记得scroll-view里面有一个binds ...