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的更多相关文章

  1. Nowcoder 提高组练习赛-R7

    Nowcoder 提高组练习赛-R7 https://www.nowcoder.com/acm/contest/179#question 中间空了两场,因为实在是太难了... 第五场的第二题好像还比较 ...

  2. Nowcoder 提高组练习赛-R1

    https://www.nowcoder.com/acm/contest/172#question 单人报名300元,五人合报免费,于是就和学弟同学学长们组了一个三世同堂的队伍,高一的学长wzhqwq ...

  3. Nowcoder 提高组练习赛-R3

    https://www.nowcoder.com/acm/contest/174#question 今天的题好难呀,只有94个人有分.然后我就爆零光荣 考到一半发现我们班要上物理课,还要去做物理实验( ...

  4. nowcoder 提高组模拟赛 选择题 解题报告

    选择题 链接: https://www.nowcoder.com/acm/contest/178/B 来源:牛客网 题目描述 有一道选择题,有 \(a,b,c,d\) 四个选项. 现在有 \(n\) ...

  5. nowcoder 提高组模拟赛 最长路 解题报告

    最长路 链接: https://www.nowcoder.com/acm/contest/178/A 来源:牛客网 题目描述 有一张 \(n\) 个点 \(m\) 条边的有向图,每条边上都带有一个字符 ...

  6. nowcoder提高组2题解

    T1 化一下试子就ok code #include<cstdio> #include<algorithm> inline long long read() { long lon ...

  7. Codevs 3287 货车运输 2013年NOIP全国联赛提高组(带权LCA+并查集+最大生成树)

    3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description A 国有 n 座 ...

  8. NOIP2018初赛总结(提高组)(试题+答案+简要解析)

    NOIP2018初赛总结(提高组) 更新完毕(纯手敲),如果有错误请在下面留言 单选题 T1.下列四个不同进制的数中,与其它三项数值上不相等的是 A.\((269)_{16}\) B.\((617)_ ...

  9. 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告

    目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...

随机推荐

  1. Oracle- 复杂查询及总结

    一.复杂查询 1. 列出至少有一个员工的所有部门编号.名称,并统计出这些部门的平均工资.最低工资.最高工资. 1.确定所需要的数据表: emp表:可以查询出员工的数量: dept表:部门名称: emp ...

  2. [日常] Go语言圣经--复合数据类型,数组习题

    go语言圣经-复合数据类型 1.以不同的方式组合基本类型可以构造出来的复合数据类型 2.四种类型——数组.slice.map和结构体 3.数组是由同构的元素组成——每个数组元素都是完全相同的类型——结 ...

  3. [小技巧]Filezilla无法确定拖放操作目标,由于shell未正确安装__解决办法

    重装系统及相关软件之后,用filezilla拖拽ftp上的文件到桌面的时候,提示"无法确定拖放操作目标......" 解决办法很简单,执行如下几步就OK了 ①在CMD中,进入Fil ...

  4. javaBean分析

    package com.ldf.domain; /** * 实体bean */ import java.io.Serializable; import java.util.Date; public c ...

  5. javascript中常见错误类型

    js中控制台报错主分两大类: 第一类:语法错误,这一类错误在javascript预解析的过程中如果遇到,则会导致整个js文件都无法执行. 另一类:统称为异常,这一类的错误会导致在错误出现的那一行之后的 ...

  6. 天天生鲜 - App设计

    天天生鲜-思路数据库设计 天天生鲜-各个App 全文检索 天天生鲜-静态文件 一.项目目录 daily_fresh_demo - daily_fresh_demo - df_cart # 购物车功能 ...

  7. 8.1、包,__init__.py,

    包: 为了组织好模块,将多个模块组合为一个包,所以包用于存放python模块 包通常是一个文件夹,当文件夹当作包使用时,文件夹需要包含__init__.py文件 __init__.py的内容可以为空, ...

  8. LeetCode 题解之 Two Sum

    1.题目描述 2.问题分析 使用hashTable 寻找,target  -  num[i] ,将时间复杂度降低到 O(n): 3.代码 vector<int> twoSum(vector ...

  9. 使用托管快照创建作为 Azure 托管磁盘存储的 VHD 的副本

    创建快照 创建 OS 或数据磁盘 VHD 的快照,以便将其用作备份或用于排查 VM 问题. 快照是 VHD 的完整只读副本. 使用 Azure 门户创建快照 登录到 Azure 门户. 首先在左上角单 ...

  10. Oracle EBS 自治事务

    自治事务程序主要是自主性,那就是,独立于主要的事务.之所以独立,或者提交之后会影响其他事务处理,本质在于它本身符合编译指令的规则,也就是说它属于在编译阶段就执行的指令,而不是在运行阶段执行的. 当自治 ...