早上
补了下昨晚上的div2
感觉题目都是思维题,有思路码起来很轻松,但是没思路就一直卡死
补完了前四题。
做了下qc给的dp题,一开始没太明白题意,懂了之后思路出的还挺快的
下午
下午花了两小时写了个单调栈的题。。。
码起来还是不熟练
这个二进制的题看了好久才搞明白
Codeforces Global Round 15 D. Array Differentiation
题目思路
根据题目我们发现数组b中n个数至少能够确定n-1个a数组的值
所以如果存在
a
i
+
…
…
+
a
j
=
=
a
k
+
…
…
a
t
a_i+……+a_j==a_k+……a_t
ai+……+aj==ak+……at的情况那么一定这时b数组一定能够构成
我们观察到n不大,枚举每个物品拿还是不拿,我们记录每个情况下最后得到的和。
如果和的个数小于枚举次数,说明存在重复,这是b数组一定能够构成
反之不能。
枚举时,我们将状态压缩一下,用二进制来枚举
ac代码
int a[maxn];
set<int>s;
int main()
{
int _;
scanf("%d",&_);
while(_--)
{
int n;
scanf("%d",&n);
s.clear();
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=0;i<(1<<n);i++)
{
int sum=0;
for(int j=1;j<=n;j++)
{
if((i>>(j-1))&1)sum+=a[j];
}
s.insert(sum);
}
if(s.size()<(1<<n))
printf("YES\n");
else
printf("NO\n");
}
}
晚上
做了道字符串构造的题,easy,hard两个版本做完就九点了。。。