题目链接

题目

题目描述

Listening to the music is relax, but for obsessive(强迫症), it may be unbearable.

HH is an obsessive, he only start to listen to music at 12:00:00, and he will never stop unless the song he is listening ends at integral points (both minute and second are 0 ), that is, he can stop listen at 13:00:00 or 14:00:00,but he can't stop at 13:01:03 or 13:01:00, since 13:01:03 and 13:01:00 are not an integer hour time.

Now give you the length of some songs, tell HH whether it's possible to choose some songs so he can stop listen at an integral point, or tell him it's impossible.

Every song can be chosen at most once.

输入描述

The first line contains an positive integer \(T(1≤T≤60)\) , represents there are \(T\) test cases.

For each test case:

The first line contains an integer \(n(1≤n≤10^5)\) , indicating there are \(n\) songs.

The second line contains \(n\) integers \(a_1,a_2…a_n (1≤a_i≤10^9 )\) , the ith integer \(a_i\) indicates the ith song lasts \(a_i\) seconds.

输出描述

For each test case, output one line "YES" (without quotes) if HH is possible to stop listen at an integral point, and "NO" (without quotes) otherwise.

示例1

输入

3
3
2000 1000 3000
3
2000 3000 1600
2
5400 1800

输出

NO
YES
YES

说明

In the first example it's impossible to stop at an integral point.

In the second example if we choose the first and the third songs, they cost 3600 seconds in total, so HH can stop at 13:00:00

In the third example if we choose the first and the second songs, they cost 7200 seconds in total, so HH can stop at 14:00:00

题解

方法一

知识点:背包dp。

此题01背包很好做但不优化会超时。

首先设置状态 \(dp[i][j]\) 为考虑了 \(i\) 首,时长模 \(3600\) 的余数为 \(j\) 的情况是否存在。模的操作是一个很关键的操作,优化了算法并最大化信息有效率,因为我们知道余数就可以知道是否整点了。

注意因为成功条件就是余数为 \(0\) ,我们不能一开始给 \(0\) 初值为 \(1\) ,但后果是某首自己的时间没法直接进入,因为无法从 \(0\) 转移,因此要特判。

但这样还不能过,需要有个跳出条件,显然 \(dp[i][0] = 1\) 时可以直接跳出。

还有个优化,但这里可以不需要,\(n\geq3600\) 时一定能成功,因为有根据抽屉原理,此时存在两个不同端点的时间余数前缀和是相同的,于是以这两个端点的连续区间和是 \(3600\) 的倍数,即余数为 \(0\) 。

最终还能滚动数组优化空间。

时间复杂度 \(O(n)\)

空间复杂度 \(O(1)\)

方法二

知识点:背包dp,STL。

由于是一个 01背包中的01类型,因此可以 bitset 常数优化。写起来也简单。

时间复杂度 \(O(n)\)

空间复杂度 \(O(1)\)

代码

方法一

#include <bits/stdc++.h>
#define ll long long using namespace std; bool dp[2][3607];
int a[100007]; bool solve() {
int n;
cin >> n;
for (int i = 1;i <= n;i++) cin >> a[i], a[i] %= 3600;
if (n >= 3600) return true;///必然能得到连续的和为3600倍数的(这道题没这个特判也行)
memset(dp, 0, sizeof(dp));
for (int i = 1;i <= n;i++) {
dp[i & 1][a[i]] = 1;///由于j=0保留为0,所以从j=0传递特判
for (int j = 0;j <= 3599;j++) {
dp[i & 1][j] |= dp[i + 1 & 1][j] | dp[i + 1 & 1][(j - a[i] + 3600) % 3600];
}
if (dp[i & 1][0]) return true;///优化
}
return false;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << "NO" << '\n';
else cout << "YES" << '\n';
}
return 0;
}

方法二

#include <bits/stdc++.h>
#define ll long long using namespace std; int a[100007]; bool solve() {
int n;
cin >> n;
for (int i = 1;i <= n;i++) cin >> a[i], a[i] %= 3600;
if (n >= 3600) return true;///必然能得到连续的和为3600倍数的(这道题没这个特判也行)
bitset<3607> dp;
for (int i = 1;i <= n;i++) {
dp |= dp << a[i] | dp >> (3600 - a[i]);///多出去那部分也要
dp[a[i]] = 1;///单独考虑
}
return dp[0];
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << "NO" << '\n';
else cout << "YES" << '\n';
}
return 0;

NC13885 Music Problem的更多相关文章

  1. 1199 Problem B: 大小关系

    求有限集传递闭包的 Floyd Warshall 算法(矩阵实现) 其实就三重循环.zzuoj 1199 题 链接 http://acm.zzu.edu.cn:8000/problem.php?id= ...

  2. No-args constructor for class X does not exist. Register an InstanceCreator with Gson for this type to fix this problem.

    Gson解析JSON字符串时出现了下面的错误: No-args constructor for class X does not exist. Register an InstanceCreator ...

  3. C - NP-Hard Problem(二分图判定-染色法)

    C - NP-Hard Problem Crawling in process... Crawling failed Time Limit:2000MS     Memory Limit:262144 ...

  4. Time Consume Problem

    I joined the NodeJS online Course three weeks ago, but now I'm late about 2 weeks. I pay the codesch ...

  5. Programming Contest Problem Types

        Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...

  6. hdu1032 Train Problem II (卡特兰数)

    题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能.    (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...

  7. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4032  Solved: 1817[Submit] ...

  8. [LeetCode] Water and Jug Problem 水罐问题

    You are given two jugs with capacities x and y litres. There is an infinite amount of water supply a ...

  9. [LeetCode] The Skyline Problem 天际线问题

    A city's skyline is the outer contour of the silhouette formed by all the buildings in that city whe ...

  10. PHP curl报错“Problem (2) in the Chunked-Encoded data”解决方案

    $s = curl_init(); curl_setopt($s, CURLOPT_POST, true); curl_setopt($s, CURLOPT_POSTFIELDS, $queryStr ...

随机推荐

  1. idea 配置 service 服务,多模块同时启动

    转载请注明出处: 1,打开IDEA项目 .idea 下 的workspace.xml 2,查找"RunDashboard" 节点 3,添加如下内容 <option name= ...

  2. Vue- 绑定的图片不显示

    需要通过 require包裹 <template> <div> {{user.username}}: <img :src="user.avatar" ...

  3. [转帖]高并发下nginx配置模板

    user web;       # One worker process per CPU core.   worker_processes 8;       # Also set   # /etc/s ...

  4. [转帖]TIDB TIKV 数据是怎么写入与通过Region 分割的?

    https://cloud.tencent.com/developer/article/1882194 国产的分布式数据库不少,TDSQL, OB, TIDB ,等等都是比较知名的产品,使用的分布式协 ...

  5. [转帖]使用 Logical Import Mode

    https://docs.pingcap.com/zh/tidb/v6.5/tidb-lightning-logical-import-mode-usage 配置及使用 可以通过以下配置文件使用 Lo ...

  6. [转帖]Zookeeper集群搭建(3个节点为例)

    Zookeeper集群搭建 1.说明 本文用的linux版本:centos6,准备3台centos6虚拟机,给他们安装zookeeper,每一台的安装过程相同,你也可以安装一台,然后克隆出另外两台.主 ...

  7. [转帖]MinIO系列7 - Minio性能压测

    https://www.zhihu.com/people/keen-wang 前言 声明:此文为本人历史笔记的整理,文章实际撰写时间为2021年2月份,所以本中所使用的相关组件版本较老.此文是通过压力 ...

  8. [转帖]《Linux性能优化实战》笔记(十九)—— DNS 解析原理与故障案例分析

    一. 域名与 DNS 解析 域名主要是为了方便让人记住,而 IP 地址是机器间的通信的真正机制.以 time.geekbang.org 为例,最后面的 org 是顶级域名,中间的 geekbang 是 ...

  9. [转帖]Sosreport:收集系统日志和诊断信息的工具

    https://zhuanlan.zhihu.com/p/39259107 如果你是 RHEL 管理员,你可能肯定听说过 Sosreport :一个可扩展.可移植的支持数据收集工具.它是一个从类 Un ...

  10. 【转帖】Docker容器四种网络模式

    https://blog.whsir.com/post-5268.html docker自身默认提供了四种网络模式:none.bridge.container.host.除了这四种网络模式外,还可以通 ...