Nowcoder 提高组练习赛-R2
https://www.nowcoder.com/acm/contest/173#question
T1:https://www.nowcoder.com/acm/contest/173/A
题意概述:对于一个序列,求把序列中的每一个数删去后的新方差*长度的平方.
良心T1,送分送温暖,把方差的式子化开,O(n)就可以解决.
# include <cstdio>
# include <iostream>
# define R register int using namespace std; const int maxn=;
int n;
long long a[maxn],s,ss,x,y,z; int main()
{
scanf("%d",&n);
for (R i=;i<=n;++i)
scanf("%lld",&a[i]),s+=a[i],ss+=a[i]*a[i];
for (R i=;i<=n;++i)
{
x=(ss-a[i]*a[i])*(n-);
y=(s-a[i])*(s-a[i]);
if(i!=n) printf("%lld ",x-y);
}
printf("%lld\n",x-y);
return ;
}
A
T2:https://www.nowcoder.com/acm/contest/173/B
题意概述:$N$个小朋友围成一圈,你有无穷个糖果,想把其中一些分给他们。从某个小朋友开始,我们顺时针给他们标号为$1~N$。第$i$个小朋友可以得到至多$a_i$,至少$1$个糖果。问,有多少种分配方案使得每一对相邻的小朋友拿到的糖果数不同。答案对$10^9+7$取模。

良心的T1反衬了T2的不良心.这道题在拿部分分的道路上设置了层层阻碍,比如说前十分的$a_i$实测极大,根本不能用后$30$分的方法来做.
考虑一个简单的$dp_ij$表示从$1$号小朋友开始发糖,发到第$i$个,且给第$i$个发了$j$个的方案数,因为$n$个人围成一个圈,所以要注意第$1$个人和第$n$个人的糖数也不能相同,可以枚举第一个人拿到的数量.
对于$a_i$全部相等的情况,可以先不考虑首尾不相等的情况,用$f_i$表示$i$个人发糖的方案数,$f_i=m*(m-1)^{i-1}$,如果首尾相同,则可以把这两个人视为同一个,这样的方案数就成了$f_{i-1}$,递推求解,然而忘开$long long$导致分数只有30.
# include <cstdio>
# include <iostream>
# include <cstring>
# define mod
# define R register int using namespace std; const int maxn=;
int n,m;
int a[maxn];
long long dp[][],s[],ans,f[maxn],t=; int main()
{
scanf("%d",&n);
for (R i=;i<=n;++i)
scanf("%d",&a[i]);
if(n>)
{
m=a[];
f[]=m%mod;
f[]=(1LL)*m*(m-)%mod;
t=(1LL)*(m-)*(m-)%mod;
for (R i=;i<=n;++i)
{
f[i]=((((1LL)*m*t-f[i-])%mod+mod)%mod);
t=(1LL)*t*(m-)%mod;
}
printf("%lld",f[n]);
return ;
}
for (R i=;i<=a[];++i)
{
memset(dp,,sizeof(dp));
memset(s,,sizeof(s));
dp[][i]=;
s[]=;
for (R j=;j<=n;++j)
{
for (R k=;k<=a[j];++k)
{
dp[j][k]=((s[j-]-dp[j-][k])%mod+mod)%mod;
if(j==n&&k==i) continue;
s[j]=(s[j]+dp[j][k])%mod;
}
}
ans=(ans+s[n])%mod;
}
printf("%lld",ans);
return ;
}
B
T3:https://www.nowcoder.com/acm/contest/173/C
题意比较复杂...
打了一个搜索,得了十分.
# include <cstdio>
# include <iostream>
# define R register int using namespace std; const int maxs=;
int n,m,k,x;
int a[maxs];
bool f=false;
int s[maxs];
int t[maxs],ans[maxs]; void check ()
{
for (R i=;i<=k;++i)
for (R j=;j<=k;++j)
if(s[ t[i]|t[j] ]==false) return;
f=true;
for (R i=;i<=k;++i)
ans[ t[i] ]=;
} void dfs (int las,int cnt)
{
if(f) return ;
if(cnt==k) check();
else
{
for (R i=las;i<=(<<n)-;++i)
{
if(s[i]) continue;
s[i]=true;
t[cnt+]=i;
dfs(i+,cnt+);
s[i]=false;
if(f) return ;
}
}
} int main()
{
scanf("%d%d%d",&n,&m,&k);
for (R i=;i<=m;++i)
scanf("%d",&a[i]),s[ a[i] ]=true;
for (R i=;i<=m;++i)
for (R j=;j<i;++j)
{
if(s[ a[i]|a[j] ]) continue;
a[++m]=a[i]|a[j];
s[ a[i]|a[j] ]=true;
}
if(m>k)
{
printf("-1");
return ;
}
for (R i=;i<=m;++i)
t[i]=a[i];
dfs(,m);
if(f)
for (R i=;i<=(<<n)-;++i)
printf("%d",ans[i]);
else
printf("-1");
return ;
}
C
这道题的正解很神奇,是一个状压dp,给每个元素一个优先级,则每个集合的特征就是这个集合中优先级最高的元素,把同样特征的集合都给一个人肯定是合法的,事实上也是构成答案的一个必需条件,问题就在于怎么分使得正好有一部分特征的集合数量总和等于要求的数量.当$k$等于$0$时,可以用$lowbit$来定义集合的优先级,这样每个优先级的集合个数就正好是$2^k$,且不会重复,显然可以用他们凑出任意所需大小的数字来.

---shzr
Nowcoder 提高组练习赛-R2的更多相关文章
- Nowcoder 提高组练习赛-R7
Nowcoder 提高组练习赛-R7 https://www.nowcoder.com/acm/contest/179#question 中间空了两场,因为实在是太难了... 第五场的第二题好像还比较 ...
- Nowcoder 提高组练习赛-R1
https://www.nowcoder.com/acm/contest/172#question 单人报名300元,五人合报免费,于是就和学弟同学学长们组了一个三世同堂的队伍,高一的学长wzhqwq ...
- Nowcoder 提高组练习赛-R3
https://www.nowcoder.com/acm/contest/174#question 今天的题好难呀,只有94个人有分.然后我就爆零光荣 考到一半发现我们班要上物理课,还要去做物理实验( ...
- nowcoder 提高组模拟赛 选择题 解题报告
选择题 链接: https://www.nowcoder.com/acm/contest/178/B 来源:牛客网 题目描述 有一道选择题,有 \(a,b,c,d\) 四个选项. 现在有 \(n\) ...
- nowcoder 提高组模拟赛 最长路 解题报告
最长路 链接: https://www.nowcoder.com/acm/contest/178/A 来源:牛客网 题目描述 有一张 \(n\) 个点 \(m\) 条边的有向图,每条边上都带有一个字符 ...
- nowcoder提高组2题解
T1 化一下试子就ok code #include<cstdio> #include<algorithm> inline long long read() { long lon ...
- Codevs 3287 货车运输 2013年NOIP全国联赛提高组(带权LCA+并查集+最大生成树)
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description A 国有 n 座 ...
- NOIP2018初赛总结(提高组)(试题+答案+简要解析)
NOIP2018初赛总结(提高组) 更新完毕(纯手敲),如果有错误请在下面留言 单选题 T1.下列四个不同进制的数中,与其它三项数值上不相等的是 A.\((269)_{16}\) B.\((617)_ ...
- 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告
目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...
随机推荐
- WebForm 基础学习
C/S 客户端应用程序(Client/Server) 客户端——服务器端 两种技术 WinForm WPF ...
- C# 数组 二维数组
数组:相同数据类型的元素按一定顺序排列的集合.是一组变量 作用:操作大量数据 数组的定义1.数组里面的内容必须是同一类型2.数据必须有长度限制 ...
- Lucene 学习-安装 Kibana 视图界面
Kibana 是一个开源的分析与可视化平台,设计出来用于和 Elasticsearch 一起使用的. 你可以使用 Kibana 搜索.查看.交互存放在 Elasticsearch 索引里的数据.使用各 ...
- Crazy Shopping(拓扑排序+完全背包)
Crazy Shopping(拓扑排序+完全背包) Because of the 90th anniversary of the Coherent & Cute Patchouli (C.C. ...
- java的XML解析(DOM4J技术)
DOM4J技术解析XML文件 一,XML简介 xml (可扩展标记语言) 全称: Extended Markup Language 可扩展的含义:允许程序员按照自己的想法去扩展新的标签 注意:但是扩 ...
- HDU5036 Explosion(期望 bitset)
题意 题目链接 Sol 和cf上的一道题几乎一摸一样 首先根据期望的线性性,可以转化为求每个点的期望打开次数,又因为每个点最多会被打开一次,只要算每个点被打开的概率就行了 设\(anc[i]\)表示\ ...
- 【读书笔记】iOS-网络-使用Game Kit实现设备间通信
Apple的Game Kit框架可以实现没有网络状况下的设备与设备之间的通信,这包括没有蜂窝服务,无法访问Wi-Fi基础设施以及无法访问局域网或Internet等情况.比如在丛林深处,高速公路上或是建 ...
- 【读书笔记】iOS-网络-三种错误
一,操作系统错误. iOS人机界面指南中,Apple建议不要过度使用AlertViews,因为这会破坏设备的使用感受. 操作系统错误: 1,没有网络. 2,无法路由到目标主机. 3,没用应和监听目标端 ...
- 自定义多选框(checkbox)和单选框(radio)css样式
直接上代码: input[type="radio"],input[type="checkbox"]{ -webkit-appearance: none; out ...
- TensorFlow Saver 保存最佳模型 tf.train.Saver Save Best Model
TensorFlow Saver 保存最佳模型 tf.train.Saver Save Best Model Checkmate is designed to be a simple drop-i ...