Codeforces Round 857 (Div. 2)

A. Likes

  求每回合最大的数列:先全使用正数,每个正数对ans++,再全使用负数,每个负数对ans--

  求每回合最小的数列:方法1(模拟):若有负数未被使用且目前点赞数>0,则使用负数对ans--;否则使用正数

  方法2(绝对值排序):按照绝对值从小到大排序,依次按正数,负数相应对ans操作

void solve(){
int n=read();
int l=0,d=0;
for(int i=1;i<=n;i++){
int x=read();
if(x>0) l++;
else d++;
}
int l1=l,dd=d,ans=0;
while(l1--){
ans++;
cout<<ans<<" ";
}while(dd--){
ans--;
cout<<ans<<" ";
}
cout<<endl; ans=0;
while(l||d){
if(ans&&d){
d--;
ans--;
}else {
l--;
ans++;
}
cout<<ans<<" ";
}
cout<<endl;
}

B. Settlement of Guinea Pigs

  按照题意有推论:(1) 未确认性别的小豚鼠只能一个人一个房子 记为L

          (2) 已确认性别的小豚鼠若有n只,则这n只需(n+2)/2个房子 记为D

  所以我们可以模拟过程,记录过程中的 ans=max(D+L,ans)

 void solve(){
int n=read();
int l=0,d=0,need=0,ans=0;
for(int i=1;i<=n;i++){
int x=read();
if(x==1) l++;
else {
if(d==0)need=max(need,l);
else need=max(need,(d+2)/2+l);
d+=l;
l=0;
}
if(need>ans){
ans=need;
}
}
if(l){
if(d==0)need=max(need,l);
else need=max(need,(d+2)/2+l);
d+=l;
l=0;
if(need>ans){
ans=need;
}
}
cout<<ans<<endl;
}

C. The Very Beautiful Blanket

  根据题目样例,需要构造每四个数的矩阵异或和为0,且矩阵内每个数不同

  赛后看了jiangly的代码,发现好简单 (马后炮是这样的)

void solve(){
int n=read(),m=read();
cout<<n*m<<endl;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<(i<<10)+j<<" \n"[j == m - 1];
}
}
}

D. Buying gifts

  贪心题 依然学习jiangly的代码 (一开始没看明白,后面把mx的数输出又看了半天 发现妙啊)

  先把所有店的两种物品都放在一起排序,同时记录val和给谁的,然后用bad记录目前未经历的店家数量

  若bad为0 说明所有店家都经历过了,因为经过排序,目前每个人手上都是必须拥有的最小价值,同时利用mx迭代最大和第二大的val,再利用2*2的格子对可能的格子进行比较,注意排除同一个店里的情况

void solve(){
int n=read();
vector<PII>a(2*n);
for(int i=0;i<n;i++){
int x=read(),y=read();
a[2*i]={x,2*i};
a[2*i+1]={y,2*i+1};
}
sort(a.begin(),a.end());
PII mx[2][2];
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
mx[i][j]={-1,-1};
}
}
vector<bool>vis(n);
int bad=n,ans=1e9;
for(auto [v,t]:a){
int u=t%2;
mx[u][1]=mx[u][0];
mx[u][0]={v,t};
bad-=!vis[t/2];
vis[t/2]=true;
for(int i=0;i<2;i++){
if(bad==0&&mx[!u][i].second!=-1&&mx[!u][i].second!=(t^1)){
ans=min(ans,v-mx[!u][i].first);
}
} }
cout<<ans<<endl;
}

Codeforces Round 857 (Div. 2) A-D的更多相关文章

  1. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  2. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  3. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  6. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  7. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  8. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

  9. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

  10. 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts

    题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...

随机推荐

  1. TypeScript Map 对象

    TypeScript Map 对象 Map 对象保存键值对,并且能够记住键的原始插入顺序. 任何值(对象或者原始值) 都可以作为一个键或一个值. Map 是 ES6 中引入的一种新的数据结构,可以参考 ...

  2. git rebase之abort,continue,skip

    git rebase --abort 会放弃合并,回到rebase操作之前的状态,之前的提交的不会丢 git rebase --skip 会将引起冲突的commit丢弃掉 git rebase --c ...

  3. ESP8266-01S 烧录AT固件

    首先就是下载官网的下载软件和AT固件 这是下载好了的 然后就是硬件电路了 我是想把ESP8266用于Ardiuno板子的,然后网上有说买的USBTOTTL的3v3供电不够,所以我就用的Ardiuno板 ...

  4. c++基础技能练习详解(回文数,字符串计数,指针比大小,递归求和,类的应用)

    //1. 调用函数实现判定用户输入的正整数是否为"回文数",所谓"回文数"是指正读反读都相同的数. (25分) bool hw(string s) { for ...

  5. 通过n个线程顺序打印26个英文字母

    通过n个线程顺序打印26个英文字母,例如 n=3 则输出: thread0: a thread1: b thread2: c thread0: d 方案一:轮询 多个线程不断轮询是否是该线程执行任务. ...

  6. Java中的super和this关键字——

    super与this关键字 先总结再解释: super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类. this关键字:指向自己的引用. super注意点: 1.s ...

  7. 微软开源 Python 自动化神器 Playwright

    背景 逛博客时候突然看到 Playwright web自动化,感觉很有意思,就翻看了很多博客,简单记录一下. 简介 Playwright是一个强大的Python库,仅用一个API即可自动执行Chrom ...

  8. 如何为linux kernel贡献代码

    参考: Linux内核文档:<如何让你的改动进入内核> - 广漠飘羽 - 博客园 提交内核补丁到Linux社区的步骤 - 广漠飘羽 - 博客园 建议: 内容具有时效性,需要阅读最新版本的同 ...

  9. leetcode之——二分法模板

    class Solution: def search(self, nums: List[int], target: int) -> int: n=len(nums) left,right=0,n ...

  10. oracle 锁用户和解锁。

    1 批量锁用户--数据库迁移后不允许在连接了 SELECT 'alter user '||username||' account lock;' from dba_users WHERE usernam ...