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. java.lang.IllegalStateException: Restarter has not been initialized

    在IDEA导入devtools依赖实现热布署,启动后遇到如下问题 java.lang.IllegalStateException: Restarter has not been initialized ...

  2. 快速导出云服务器mysql的表数据

    1.许多互联网应用的数据库都布署在远程的Linux云服务器上,我们经常要编辑表数据,导出表数据. 通常的做法是ssh连接到服务器,然后命令登录,命令查询导出数据,费时费力,效率低下. 安装TreeSo ...

  3. Java 初/中级面试题及答案【详细】

    1.Java的HashMap是如何工作的? HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值. HashMap 基于 hashing 原理,我们通过 put ()和 g ...

  4. pycharm 光标快速移动到括号外或行尾

    coupon = models.ForeignKey("Coupon", on_delete=models.CASCADE) pycharm中编写程序,  需要将光标快速移动到“” ...

  5. Hadoop Mapreduce 参数 (二)

    MergeManagerImpl 类 内存参数计算 maxInMemCopyUse 位于构造函数中 final float maxInMemCopyUse = jobConf.getFloat(MRJ ...

  6. 随手记:tomcat 与JDK 安装与配置

    写了3年的JAVA 每次遇到配置JDK 与按照tomcat的时候都要去网上找一下,太丢人了,所以还是记一下比较好,虽然都知道要配置哪些,但每次都还是有些不确定的感觉~ JDK : 1.安装官网 htt ...

  7. JS touch

    一个月没写博客了,感觉空唠唠的,有多好想写的,今天全都给补上吧,记录最近这个月的收获 https://blog.csdn.net/sinat_19327991/article/details/7382 ...

  8. PHP 绘制验证码

    使用PHP绘制验证码  可直接使用 // 验证码 <?php $checkCode = ""; for ($i=0; $i < 4; $i++) { // 十进制转换为 ...

  9. org.springframework.transaction.CannotCreateTransactionException Could not open

    org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for ...

  10. [HNOI2011]括号修复

    设\(nd[4]\) 0--多出来的右括号 1--多出来的左括号 2--取反后多出来的右括号 3--取反后多出来的左括号 这样一来 Swap: swap(0,3),swap(1,2),swap(sn[ ...