Codeforces Round #263 (Div. 2)
吐槽:一辈子要在DIV 2混了。
A,B,C都是简单题,看AC人数就知道了。
A:如果我们定义数组为N*N的话就不用考虑边界了
#include<iostream>
#include <string>
#include <vector>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f
#define N 12345
typedef long long ll;
int a[N];
char s[][];
int main()
{
int n;
scanf("%d",&n);
for (int i=;i<=n;i++)
scanf("%s",s[i]+); int flag=;
for (int i=;i<=n;i++)
for (int j=;j<=n;j++){
int ans=;
if (s[i-][j]=='o') ans++;
if (s[i][j-]=='o') ans++;
if (s[i][j+]=='o') ans++;
if (s[i+][j]=='o') ans++;
if (ans&) {flag=;break;}
} if (flag) printf("YES");
else printf("NO");
return ;
}
B:语文实在...。。
可以是贪心。。。
只要对26个字母排序
233
#include<iostream>
#include <string>
#include <vector>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f
#define N 123456
typedef long long ll;
ll a[N];
string s;
int main()
{
int n;
ll k;
cin>>n>>k;
cin>>s;
for (int i=;i<s.size();i++)
a[s[i]-'A']++;
sort(a,a+);
ll ans=;
for (int i=;i>=;i--)
{
if (k>=a[i]) {ans+=a[i]*a[i];k-=a[i];
}
else {ans+=k*k;break;}
}
cout<<ans<<endl;
return ;
}
这题也是贪心做法。。
因为我们要加的数的个数是一定的。。。
如果排序好,尽量加大的,就OK了。。所以每次我们把最小的踢出去。
就可以算出每个数要加多少。
#include<iostream>
#include <string>
#include <vector>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f
#define N 323456
typedef long long ll;
ll a[N];
string s;
int main()
{
int n;
cin>>n;
for (int i=;i<=n;i++)cin>>a[i];
ll ans=;
sort(a+,a+n+);
for (int i=;i<n;i++)
ans+=a[i]*(i+);
ans+=a[n]*n;
cout<<ans;
return ;
}
D:练了不少树形DP了,但是这题完全没思路。真是渣一辈子DIV 2。
思路:定义DP[I][1]表示以I为根的数中有BLACK节点
DP[I][0]表示没有BLACK节点。。
转移方程
U是ROOT的子节点
初始:DP[ROOT][COLOR[ROOT]]=1;
DP[ROOT][1]=DP[ROOT][1]*DP[U][1]+DP[ROOT][0]*DP[U][1]+DP[ROOT][1]*DP[U][0];
DP[ROOT][0]=DP[ROOT][0]*DP[U][0]+DP[ROOT][0]*DP[U][1];
#include<iostream>
#include <string>
#include <vector>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define N 112345
#define inf 1000000007
typedef long long ll;
using namespace std;
vector<int>G[N];
ll dp[N][];
int col[N];
int n; void dfs(int root,int pre)
{
dp[root][col[root]]=;
for (int i=;i<G[root].size();i++)
{
int x=G[root][i];
if (x==pre) continue;
dfs(x,root);
dp[root][]=(dp[root][]*dp[x][]%inf+dp[root][]*dp[x][]+dp[root][]*dp[x][])%inf;
dp[root][]=(dp[root][]*dp[x][]%inf+dp[root][]*dp[x][]%inf)%inf;
}
} int main()
{
scanf("%d",&n);
for (int i=;i<n;i++)
{
int x;
scanf("%d",&x);
G[i].push_back(x);
G[x].push_back(i);
}
for (int i=;i<n;i++)
scanf("%d",&col[i]);
dfs(,-);
printf("%d\n",dp[][]);
return ;
}
后记:
树形DP比较抽象。。。多做题才能提高
Codeforces Round #263 (Div. 2)的更多相关文章
- 贪心 Codeforces Round #263 (Div. 2) C. Appleman and Toastman
题目传送门 /* 贪心:每次把一个丢掉,选择最小的.累加求和,重复n-1次 */ /************************************************ Author :R ...
- Codeforces Round #263 (Div. 1)
B 树形dp 组合的思想. Z队长的思路. dp[i][1]表示以i为跟结点的子树向上贡献1个的方案,dp[i][0]表示以i为跟结点的子树向上贡献0个的方案. 如果当前为叶子节点,dp[i][0] ...
- Codeforces Round #263 Div.1 B Appleman and Tree --树形DP【转】
题意:给了一棵树以及每个节点的颜色,1代表黑,0代表白,求将这棵树拆成k棵树,使得每棵树恰好有一个黑色节点的方法数 解法:树形DP问题.定义: dp[u][0]表示以u为根的子树对父亲的贡献为0 dp ...
- 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 ...
- Codeforces Round #263 (Div. 2) A B C
题目链接 A. Appleman and Easy Task time limit per test:2 secondsmemory limit per test:256 megabytesinput ...
- Codeforces Round #263 (Div. 1) C. Appleman and a Sheet of Paper 树状数组暴力更新
C. Appleman and a Sheet of Paper Appleman has a very big sheet of paper. This sheet has a form of ...
- Codeforces Round #263 (Div. 2) proC
题目: C. Appleman and Toastman time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Codeforces Round #263 (Div. 2)C(贪心,联想到huffman算法)
数学家伯利亚在<怎样解题>里说过的解题步骤第二步就是迅速想到与该题有关的原型题.(积累的重要性!) 对于这道题,可以发现其实和huffman算法的思想很相似(可能出题人就是照着改编的).当 ...
- Codeforces Round #263 (Div. 2) proB
题目: B. Appleman and Card Game time limit per test 1 second memory limit per test 256 megabytes input ...
随机推荐
- 自定义DatePicker,年月日,不显示其中某几项
经过源码研究:该结构主要包含三个NumberPicker: private final NumberPicker mDayPicker; private final NumberPicker mMon ...
- OVER Clause是个好东西,常和ROW_NUMBER()、Sum、AVG、Count、Min、Max配合使用
根据SQL官方帮助的实例: USE AdventureWorks2012; GO SELECT ROW_NUMBER() OVER(PARTITION BY PostalCode ORDER BY S ...
- Unix 编程
1. Users and Groups 真实用户ID和真实组ID 真实用户ID和组ID表示运行进程的真实用户 ID 和 组ID. 有效用户ID和有效组IDp 有效 ID 是进程进行相关操作(比如系统调 ...
- 使用MSYS2编译64位gvim
1. 下载安装MSYS2 在https://msys2.github.io/下载MSYS2,推荐下载x86-64版,此版本内置了MinGW32与MinGW64 安装后首先更新MSYS2系统,顺序执行下 ...
- DB2表结构DDL脚本导出
db2look是导出DDL语句脚本的命令,以下是对db2look的一个简单介绍. 语法:db2look -d <数据库名> -e -t <表名> -o <文件名>. ...
- 2天驾驭DIV+CSS (基础篇)(转)
这是去年看到的一片文章,感觉在我的学习中,有不少的影响.于是把它分享给想很快了解css的兄弟们. 基础篇[知识一] “DIV+CSS” 的叫法是不准确的[知识二] “DIV+CSS” 将你引入两大误区 ...
- Python - DICT 字典排序 - OrderedDict
官方地址: https://docs.python.org/2/library/collections.html#collections.OrderedDict >>> # regu ...
- 调用webservice客户端方法 runtime modeler error: Wrapper class ××× is not found. Have you run APT to generate them?
用wsimport生成webservice的客户端以后,调用客户端生成方法时总是出现 runtime modeler error: Wrapper class stardand.nrcms.nckin ...
- shell 简介
shell 简介 shell既是一种命令语言,也是一种程序设计语言.作为命令语言,它交互式地解析和执行用户输入的命令:作为程序设计语言,他定义了各种变量和参数,并提供了许多的高级语言才具有的控制结构, ...
- P1571: [Usaco2009 Open]滑雪课Ski
DP. ; var t,s,n,i,j,m,l,a,c,d:longint; f,e:array[..,..maxn] of longint; q:array[..] of longint; g:ar ...