layout: post
title: Codeforces Round 263(Div. 2)
author: "luowentaoaa"
catalog: true
tags:
mathjax: true
- codeforces
- 树形DP
- 树状数组


传送门

A - Appleman and Easy Task (签到)

题意

判断棋盘中是否每个点四周都有偶数个‘x'

思路

暴力

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=2e6+50;
const ll inf=1e17;
typedef unsigned long long ull;char s[150][150];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){cin>>s[i]+1;}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int cnt=0;for(int k=0;k<4;k++){int xx=i+dx[k];int yy=j+dy[k];cnt+=s[xx][yy]=='o';}if(cnt&1)puts("NO"),exit(0);}}puts("YES");return 0;
}

B - Appleman and Card Game (贪心)

题意

可以选K个字母,价值是这个字母的数量的平方,求最大的价值

思路

平方函数斜率得知 x越大价值越大

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=2e6+50;
const ll inf=1e17;
typedef unsigned long long ull;char s[maxn];
int num[maxn];
int main()
{int n,k;cin>>n>>k;cin>>s;int len=strlen(s);ll ans=0;for(int i=0;i<len;i++)num[s[i]-'A']++;sort(num,num+26,greater<int>());for(int i=0;i<26;i++){if(num[i]){if(k>=num[i])k-=num[i],ans+=1LL*num[i]*num[i];else{ans+=1LL*k*k;k=0;}}}cout<<ans<<endl;return 0;
}

C - Appleman and Toastman (贪心)

题意

AB做一个游戏,A给B一个数组,B把数组切一刀 然后再给A,如果B收到一个单独的数字就把这个数字扔掉,如果A收到一组数价值就加这组数字和

思路

贪心得每次让B把数组的最小的切掉

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=2e6+50;
const ll inf=1e17;
typedef unsigned long long ull;ll a[maxn];int main()
{int n,k;cin>>n;ll sum=0;priority_queue<ll,vector<ll>,greater<int> >Q;for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i],Q.push(a[i]);sort(a+1,a+1+n);ll ans=0;while(!Q.empty()){ans+=sum;if(Q.size()>1)ans+=Q.top();sum-=Q.top();Q.pop();}cout<<ans<<endl;return 0;
}

D - Appleman and Tree (树形DP)

题意

给出一棵以0为根的树,每个节点都有可能是黑色或者白色,让你分成K部分,使得每部分都恰好有一个黑点 求方案数

思路

考虑只有两个相邻结点,A,B

如果A所在部分想要是黑色,那么他就要么自己是黑色,那就需要把B是黑色的切掉

如果A所在部分想要是黑色,那么他就要么自己是黑色,那就需要把B是白色的连接

如果A所在部分想要是黑色,那么他就要么自己是白色,那就需要把B是黑色的连接

如果A所在部分想要是白色,他们他自己只能是白色,那就需要把B是黑色的切掉

如果A所在部分想要是白色,他们他自己只能是白色,那就需要把B是白色的相连

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=2e5+50;
const ll inf=1e17;
typedef unsigned long long ull;vector<int>G[maxn];
int val[maxn];
ll dp[maxn][2];void dfs(int u){if(val[u])dp[u][1]=1,dp[u][0]=0;else dp[u][0]=1,dp[u][1]=0;for(int i=0;i<G[u].size();i++){int now=G[u][i];dfs(now);ll yes=dp[u][1];ll no=dp[u][0];dp[u][1]=1LL*yes*dp[now][1]%mod;dp[u][1]+=1LL*yes*dp[now][0]%mod;dp[u][1]+=1LL*no*dp[now][1]%mod;dp[u][0]=1LL*no*dp[now][1]%mod;dp[u][0]+=1LL*no*dp[now][0]%mod;dp[u][1]%=mod;dp[u][0]%=mod;/*cout<<"dp[now][1]="<<dp[now][1]<<" dp[now][0]="<<dp[now][0]<<endl;cout<<"dp[u][1]="<<dp[u][1]<<" dp[u][0]="<<dp[u][0]<<endl;cout<<"yes="<<yes<<" no="<<no<<endl;*/}
}int main()
{int n;cin>>n;for(int i=1;i<n;i++){int x;cin>>x;G[x].push_back(i);}for(int i=0;i<n;i++){cin>>val[i];}dfs(0);cout<<dp[0][1]<<endl;return 0;
}

E - Appleman and a Sheet of Paper(树状数组大模拟)

题意

给你一张纸 参考1*n的数组

然后两种操作,给你一个K,让你把左边K个数组折到右边

第二个操作 询问区间范围内的纸张厚度和

思路

因为每个操作1都会让至少一个格子变少,所以直接暴力即可

然后区间求和就可以用数据结构维护

发现操作1可能K比后面的长度还大,这时候就可以倒过来,相当于让后面N-K个折到左边

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=1e5+50;
const int inf=1e8;typedef unsigned long long ull;
int n,q;
int a[maxn];
bool pre;
void update(int x,int y){while(x<=n)a[x]+=y,x+=x&-x;
}
int sum(int x){int ans=0;while(x){ans+=a[x];x-=x&-x;}return ans;
}
int get(int l,int r){if(l>r)swap(l,r);return sum(r)-sum(l);
}
int main()
{cin>>n>>q;for(int i=1;i<=n;i++)update(i,1);int cl=1,cr=n;while(q--){int t,l,r;cin>>t;if(t==1){int sz=cr-cl+1;cin>>l;if(l>sz/2){pre=!pre;l=sz-l;}if(pre){for(int j=0;j<l;j++)update(cr-l-j,get(cr-l+j,cr-l+j+1));cr-=l;}else{for(int j=0;j<l;j++)update(cl+l+j,get(cl+l-j-1,cl+l-j-2));cl+=l;}}else{cin>>l>>r;l++;if(pre)cout<<get(cr-r,cr-l+1)<<endl;else cout<<get(cl+l-2,cl+r-1)<<endl;}}return 0;
}

转载于:https://www.cnblogs.com/luowentao/p/10533240.html

Codeforces Round 263(Div. 2)相关推荐

  1. Codeforces Round #263 (Div. 2) D. Appleman and Tree 树形dp

    链接: http://codeforces.com/contest/462/problem/D 题意: 给定n个点的树, 0为根,下面n-1行表示每个点的父节点 最后一行n个数 表示每个点的颜色,0为 ...

  2. Codeforces Round #263 (Div.1) B. Appleman and Tree

    题目地址:http://codeforces.com/contest/461/problem/B 题目大意:给一棵树.每一个点为白色或黑色.切断一些边,使得每一个连通块有且仅有一个黑点,问划分方案数. ...

  3. Codeforces Round #263 (Div. 2) D. Appleman and Tree(树形DP)

    题目链接 D. Appleman and Tree time limit per test :2 seconds memory limit per test: 256 megabytes input ...

  4. Codeforces Round #263 (Div. 1)-A,B,C

    A: 这道题目还是很简单的,做过很多遍了,类似于切割木板的问题. 把所有的数放在一个优先队列里,弹出两个最大的,然后合并,把结果放进去.依次进行. #include <iostream> ...

  5. Codeforces Round #739 (Div. 3) ABCDEF1F2 解题思路

    Codeforces Round #739 (Div. 3) 可能是一开始大佬都写F1去了,我在D写完后发现F过的人数比E多了好多(个位数与十位数),以为F1比较简单,就直接开F1了,但自己分类讨论老 ...

  6. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  7. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  8. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  9. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

最新文章

  1. Java基础学习总结(1)——equals方法
  2. 如何学好机器学习数据挖掘?这本《数据分析数学基础》图文并茂带你学习入门...
  3. 面向未来的数据中心需要防止立法蠕变
  4. 萨默尔机器人_助力产业发展 西安市人工智能机器人学会正式成立
  5. 到底什么成就了今天的人工智能?(上)
  6. Java核心类库篇8——网络编程
  7. MySQL正则表达式的使用
  8. java 基础知识-数组的7种算法(排序、求和、最值、遍历...)
  9. 七日Python之路--第八天(一些琐碎)
  10. CentOS7安装dnf
  11. Linq To Sql进阶系列(三)CUD和Log
  12. 定时执行Python程式
  13. java 排列组合算法_关于各种排列组合java算法
  14. HDU-1556题解
  15. php weixin provider,14、ABPZero系列教程之拼多多卖家工具 新建微信公众号模块
  16. 最新 955 不加班的公司名单(2022版)
  17. ps2键盘测试软件,PS2键盘51测试程序2
  18. Scratch如何学习?少儿编程网站如何入手?
  19. [含论文+源码等]基于HTML5,DIV CSS实现的宠物狗个性化服务网站前端(静态网页毕业设计)web前端毕设
  20. linux系统echo函数,Linux下echo与time服务的程序实现

热门文章

  1. 前端学习 -- 超链接
  2. cogs 服务点设置
  3. [笔记].关于Nios II的数据类型的一点想法
  4. 计算机调查取证分析篇
  5. centos6.9安装Tomcat8.0.36
  6. 4698: Sdoi2008 Sandy的卡片
  7. 7 并发编程-(线程)-开启线程的两种方式
  8. 夺命雷公狗---微信开发57----微网站之jquery_mobile之入门案例
  9. Jquery源码中的Javascript基础知识(四)— jQuery.fn.init方法
  10. No identities are available for signing的解决方法