layout: post

title: Codeforces Round 254 (Div. 2)

author: "luowentaoaa"

catalog: true

tags:

mathjax: true

- codeforces

- 模拟栈

- 贪心


传送门

A.DZY Loves Chessboard (签到)

题意

给你一个N×M的地图 再空地上填上白棋或者黑棋要求同色棋子不能相邻

思路

直接搜索一下

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=5e4+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
char s[150][150];
int n,m;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
void dfs(int x,int y,bool f){
if(f)s[x][y]='W';
else s[x][y]='B';
for(int i=0;i<4;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if(xx<0||xx>=n||yy<0||yy>=m||s[xx][yy]!='.'){
continue;
}
dfs(xx,yy,f?false:true);
}
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>s[i];
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(s[i][j]=='.'){
dfs(i,j,0);
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<s[i][j];
}
cout<<endl;
}
return 0;
}

B - DZY Loves Chemistry (联通块)

题意

有一堆化学品,他们有的两个之间有化学反应,现在按一定顺序投放到一个试管中,如果投放之前试管内部有可以与当前投放的反应那么答案×2 怎么样投放答案最大,输出最大答案

思路

很容易想到最优答案就是可以反应的联通块的大小-1次方,然后多一个联通快就少1,那么答案就是总数减去联通快个数次方

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=5e4+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
int fa[maxn];
int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
ll n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
a=find(a),b=find(b);
fa[a]=b;
}
ll ans=0;
for(int i=1;i<=n;i++){
if(fa[i]==i)ans++;
}
cout<<(1LL<<(1LL*n-ans*1LL));
return 0;
}

C - DZY Loves Physics (结论)

题意

给你一个图,定义图的密度是图的点值/两点之间的边值

让你找出一个联通封闭诱导子图 使得图的密度最大

思路

假设两个点的答案是最大的 那么答案为

\[\frac{u+v}{c}
\]

u和v是两个结点的值 c是他们之间的边的值

对于大于两个点的答案为

\[\frac{\sum u+\sum v}{\sum c}
\]

假设B的值为这个答案

\[B=\frac{\sum u+\sum v}{\sum c}
\]

那么对于任意一条边的值

对于任意的

\[\frac{u+v}{c} <B \\then\\u+v<Bc
\]

可以变成

\[\sum u+\sum v <B\sum c
\]

那么这样会得出

\[B>\frac{\sum u+\sum v}{\sum c}
\]

与上面矛盾 证毕

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=5e4+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
double a[maxn]; int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
int n,m;
double ans=0;
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
while(m--){
int u,v,w;
cin>>u>>v>>w;
ans=max(ans,double((a[v]+a[u])/w));
}
cout<<fixed<<setprecision(15);
cout<<ans;
return 0;
}

D - DZY Loves FFT (随机数乱搞理论)

题意

给出一个随机数组A,B,让你对于每个

求出Ci

思路

可以发现A,B是完全随机的,而且暴力复杂度爆炸,

从大到小枚举排列中的数,再不断更新答案.更新过的答案就不需要再更新了

开一个优先队列保存起来,然后就是判断这前多少大的数据可不可以被取到,对于一个数钱50大的数对于他来说都没办法被取到的概率大概是

A50取50的概率分之一

优先队列的size越大概率越小

如果是在取不到就暴力一下把

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=1e5+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
ll x,n,d;
ll a[maxn],b[maxn];
ll getNextX(){
x=(x*37+10007)%1000000007;
return x;
}
void initAB(){
int i;
for(i = 0; i < n; i = i + 1){
a[i] = i + 1;
}
for(i = 0; i < n; i = i + 1){
swap(a[i], a[getNextX() % (i + 1)]);
}
for(i = 0; i < n; i = i + 1){
if (i < d)
b[i] = 1;
else
b[i] = 0;
}
for(i = 0; i < n; i = i + 1){
swap(b[i], b[getNextX() % (i + 1)]);
}
}
priority_queue<pair<ll,int> >all;
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
cin>>n>>d>>x;
initAB();
vector<int>B;
for(int i=0;i<n;i++)if(b[i])B.push_back(i);
for(int i=0;i<n;i++){
all.push({a[i],i});
bool yes=false;
priority_queue<pair<ll,int> >now;
for(int j=0;j<50&&!all.empty();j++){
ll value=all.top().first;
int id=all.top().second;
if(!yes&&b[i-id]){
cout<<value<<endl;
yes=true;
}
now.push(all.top());
all.pop();
}
if(!yes){
ll ans=0;
for(int j=0;j<B.size()&&B[j]<=i;j++)ans=max(ans,a[i-B[j]]);
cout<<ans<<endl;
}
all=now;
}
return 0;
}

DZY Loves Colors (区间合点线段树)

题意

给出N个点M个操作

每个操作可以把一段区间染色 并且如果一个结点被染色那么他的value会增加abs(new-old)

另一个操作是求区间的value

思路

区间问题首先线段树和分块

都能做 我先说线段树,分块晚上在做

线段树,我们可以每次把一个染色的区间看成一个点,对于一次染色最多把三个区间看成一个结点,也就是logn的复杂度

所以答案就是mlogn

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=1e5+50;
const ll inf=0x3f3f3f3f3f3f3f3fLL;
int n,m;
void read(int &res){
res=0;
char c;
while(c=getchar(),c<48);
do res=(res<<3)+(res<<1)+(c^48);
while(c=getchar(),c>47);
}
inline void out(ll x)
{
if (x > 9) out(x / 10);
putchar(x % 10 + '0');
}
struct SegTree{
struct node{
int l,r,len,color,mid;
ll sum,lazy;
}my[maxn<<2];
void build(int o,int l,int r){
my[o].l=l,my[o].r=r,my[o].len=(r-l+1),my[o].mid=(l+r)/2;
my[o].sum=my[o].lazy=0;my[o].color=-1;
if(l==r){
my[o].color=l;
return;
}
int mid=(l+r)/2;
build(o<<1,l,mid);
build(o<<1|1,mid+1,r);
}
inline void up(int o){
my[o].sum=my[o<<1].sum+my[o<<1|1].sum;
if(my[o<<1].color==my[o<<1|1].color)my[o].color=my[o<<1].color;
else my[o].color=-1;
}
void mix(int o,ll val,int col){
my[o].lazy+=val;
my[o].sum+=1LL*my[o].len*val;
my[o].color=col;
}
void down(int o){
if(!my[o].lazy)return;
mix(o<<1,my[o].lazy,my[o].color);
mix(o<<1|1,my[o].lazy,my[o].color);
my[o].lazy=0;
}
void update(int o,int l,int r,int val){
if(my[o].l>=l&&my[o].r<=r&&~my[o].color){
mix(o,abs(val-my[o].color),val);
return;
}
int mid=my[o].mid;
down(o);
if(l<=mid)update(o<<1,l,r,val);
if(r>mid)update(o<<1|1,l,r,val);
up(o);
}
ll query(int o,int l,int r){
if(my[o].l>=l&&my[o].r<=r){
return my[o].sum;
}
down(o);
int mid=my[o].mid;
ll ans=0;
if(l<=mid)ans+=query(o<<1,l,r);
if(r>mid)ans+=query(o<<1|1,l,r);
return ans;
}
}seg;
int main()
{
read(n);read(m);
seg.build(1,1,n);
while(m--){
int type,l,r,val;
read(type);
if(type==1){
read(l);read(r);read(val);
seg.update(1,l,r,val);
}
else{
read(l);read(r);
out(seg.query(1,l,r));
puts("");
}
}
return 0;
}

Codeforces Round 254 (Div. 2)的更多相关文章

  1. Codeforces Round #254 (Div. 1) C. DZY Loves Colors 线段树

    题目链接: http://codeforces.com/problemset/problem/444/C J. DZY Loves Colors time limit per test:2 secon ...

  2. Codeforces Round #254 (Div. 1) D - DZY Loves Strings

    D - DZY Loves Strings 思路:感觉这种把询问按大小分成两类解决的问题都很不好想.. https://codeforces.com/blog/entry/12959 题解说得很清楚啦 ...

  3. Codeforces Round #254 (Div. 1) D. DZY Loves Strings hash 暴力

    D. DZY Loves Strings 题目连接: http://codeforces.com/contest/444/problem/D Description DZY loves strings ...

  4. Codeforces Round #254 (Div. 1) C. DZY Loves Colors 分块

    C. DZY Loves Colors 题目连接: http://codeforces.com/contest/444/problem/C Description DZY loves colors, ...

  5. Codeforces Round #254 (Div. 1) A. DZY Loves Physics 智力题

    A. DZY Loves Physics 题目连接: http://codeforces.com/contest/444/problem/A Description DZY loves Physics ...

  6. Codeforces Round #254 (Div. 2) A. DZY Loves Chessboard —— dfs

    题目链接: http://codeforces.com/problemset/problem/445/A 题解: 这道题是在现场赛的最后一分钟通过的,相当惊险,而且做的过程也很曲折. 先是用递推,结果 ...

  7. Codeforces Round #254 (Div. 1) C DZY Loves Colors

    http://codeforces.com/contest/444/problem/C 题意:给出一个数组,初始时每个值从1--n分别是1--n.  然后两种操作. 1:操作 a.b内的数字是a,b内 ...

  8. [题解]Codeforces Round #254 (Div. 2) B - DZY Loves Chemistry

    链接:http://codeforces.com/contest/445/problem/B 描述:n种药品,m个反应关系,按照一定顺序放进试管中.如果当前放入的药品与试管中的药品要反应,危险系数变为 ...

  9. [题解]Codeforces Round #254 (Div. 2) A - DZY Loves Chessboard

    链接:http://codeforces.com/contest/445/problem/A 描述:一个n*m的棋盘,有一些格子不能放棋子.现在把黑白棋子往上放,要求放满且相邻格子的棋子颜色不同.输出 ...

随机推荐

  1. [BZOJ5417] [NOI2018]你的名字

    Description 小A 被选为了ION2018 的出题人,他精心准备了一道质量十分高的题目,且已经把除了题目命名以外的工作都做好了. 由于ION 已经举办了很多届,所以在题目命名上也是有规定的, ...

  2. 洛谷P4589 [TJOI2018]智力竞赛 【floyd + 二分 + KM】

    题目链接 洛谷P4589 题意可能不清,就是给出一个带权有向图,选出\(n + 1\)条链,问能否全部点覆盖,如果不能,问不能覆盖的点权最小值最大是多少 题解 如果要问全部覆盖,就是经典的可重点的DA ...

  3. 一个acm过来人的心得

    刻苦的训练我打算最后稍微提一下.主要说后者:什么是有效地训练? 我想说下我的理解.        很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了.其实,这既不是充分条件.也不会是 ...

  4. [poj 2104]主席树+静态区间第k大

    题目链接:http://poj.org/problem?id=2104 主席树入门题目,主席树其实就是可持久化权值线段树,rt[i]维护了前i个数中第i大(小)的数出现次数的信息,通过查询两棵树的差即 ...

  5. jquery的ajax实现方式

    在JQuery中,AJAX有三种实现方式:$.ajax() , $.post , $.get(). 首先我们看$.get(): .代码如下: $.get("test.jsp", { ...

  6. Android布局优化思考

    一.关于RelativeLayout和LinearLayout的使用 由源码可以知道,RelativeLayout需要对其子View进行两次measure过程,而LinearLayout只需一次mea ...

  7. 数据结构之DFS与BFS

    深度搜索(DFS) and  广度搜索(BFS) 代码如下: #include "stdafx.h" #include<iostream> #include<st ...

  8. abstract 与interface区别

    1.abstract用于修饰类,interface用于修饰接口 2.抽象类中可以有抽象和非抽象方法,接口中只能定义抽象方法,不能有实现 3.抽象类必须被继承,interface被实现 4.抽象类有构造 ...

  9. [BZOJ3275]Number解题报告|网络流

    Description 有N个正整数,需要从中选出一些数,使这些数的和最大.若两个数a,b同时满足以下条件,则a,b不能同时被选1:存在正整数C,使a*a+b*b=c*c2:gcd(a,b)=1 这道 ...

  10. [POJ2135]最小费用最大流

    一直由于某些原因耽搁着...最小费用最大流没有搞会. 今天趁着个人状态正佳,赶紧去看看,果然30min不到看会了算法+模板并且A掉了一道题. 感觉最小费用最大流在学过了最大流之后还是挺好理解的.找到从 ...