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 ...
随机推荐
- 微信支付 统一下单 字段 body 为中文时 报【签名错误】解决方案(C# SDK)
方案一 如果你是从微信支付官网下载的 .NET C#[微信支付]API对应的SDK 调用示例 查看源码,会发现这个SDK中的 WxPayData 的类的 CalcHMACSHA256Hash 签名方法 ...
- async、await正确姿势
摘要 async.await是在C# 5.0之后引入的一种简化异步操作的方式.使用它们之后,可以使我们的编写异步操作更加方便快捷,维护以及阅读起来更方便. 一个例子 async.await虽然简化了我 ...
- asp.net错误记录
//登录 jquery-ajax post请求后台无法获取数据,get就可以!!!原因:get方法,后台接收用Request.QueryString["para1"];post方法 ...
- [日常] Go语言圣经--包和文件-包初始化习题
1.解决包级变量的依赖顺序,然后按照包级变量声明出现的顺序依次初始化 2.包中含有多个.go源文件,它们将按照发给编译器的顺序进行初始化 3.init初始化函数,在每个文件中的init初始化函数,在程 ...
- hadoop_批量命令脚本&同步文件脚本
1.xcall.sh 批量命令脚本,例:xcall.sh jps ,查看hadoop101~ hadoop104的jps进程 注意:在执行命令的时候,若是提示没有这个命令,但是在本机又可以执行,记得在 ...
- win7游戏窗口设置
在开始搜索框输入regedit打开注册表,定位到HKEY_LOCAL_MACHINE------SYSTEM------ControlSet001-------Control-------Graphi ...
- stylus常用写法
带参数 border-radius(val) -webkit-border-radius: val -moz-border-radius: val border-radius: val button ...
- Onsen UI for React文档
注:采用ES6+JSX语法 1.开始一个项目 在React中使用Onsen UI 需要首先安装onsenui和react-onsenui模块. 可以使用monaca CLI工具包快速初始化一个应用: ...
- js-权威指南学习笔记21
第二十一章 多媒体和图形编程 1.为了强制让图片缓存起来,首先利用Image()构造函数来创建一个屏幕外的图片对象,之后将该对象的src属性设置成期望的URL. 2.由于各家浏览器制造商未能在对标准音 ...
- 【读书笔记】iOS-自定义视图的创建
静态创建自定义视图就是以拖动的方法来创建. 动态创建自定义视图可以理解为使用代码来创建自定义视图. 参考资料:<iOS7开发快速入门>