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 ...
随机推荐
- C#取整函数Math.Round、Math.Ceiling和Math.Floor 【非原创,用来收藏,分享】
1.Math.Round:四舍六入五取偶 引用内容 Math.Round(0.0) //0Math.Round(0.1) //0Math.Round(0.2) //0Math.Round(0.3) / ...
- 浅谈JSONP (vue-jsonp组件 XXXtoken:报错处理)
由于同源策略的存在,特别是前后端两个项目存在的情况下,客户端访问服务端必然存在跨域的情况,而使用jsonp,则不存在这个问题. 主要是因为jsonp是在页面中插入一段js代码,而请求返回的也是一段js ...
- windows中80端口被System占用,PID=4的问题
在windows中如果tomcat需要使用80端口,发现该端口已经被占用,而netstat -ano发现该80端口被一个System的进程占用了,而PID=4.我们可以通过下面的方式找到对应的进程,然 ...
- [小技巧]Filezilla无法确定拖放操作目标,由于shell未正确安装__解决办法
重装系统及相关软件之后,用filezilla拖拽ftp上的文件到桌面的时候,提示"无法确定拖放操作目标......" 解决办法很简单,执行如下几步就OK了 ①在CMD中,进入Fil ...
- java设计模式(一)【六大原则】
开发一个系统并不是一件困难的事,但是为何维护好一个系统却是一件让人头疼不以的事? 在笔者的观念中这一切都源自于需求. 如果在软件开发完成之后,需求就不再改变,那大部分程序都不需要维护了.但是, ...
- HDU1260(KB12-H DP)
Tickets Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- 实例化Flask的参数 及 对app的配置
Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from ...
- PHP 类文件的自动加载机制 __autoload()
如果一个类在多个脚本中都需要使用,可以将一个类的定义代码,单独的封装到一个文件中,这种文件也叫作类文件,在需要的时候,将整个文件载入进来即可! PHP在执行的时候,如果发现需要一个类(只要是和这个类相 ...
- 关于在JSP页面用c标签写if语句
2017年5月28日,晴,心情还不错. 昨晚和同事撸串,回来后继续威士忌走起,喝到凌晨2点多,聊的甚欢.彼此分享了很多自己成长过程中的故事,相互之间有了进一步的了解,友情又进了一步.在以后的时光里,愿 ...
- easyui+webuploader+ckeditor实现插件式多图片上传-添加图片权限(图片上传人是谁,只能看到自己的图片)
需求: 实现过程及思路 1.先页面布局 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=" ...