AcWing 4498. 指针 (DFS)

题目链接:4498. 指针 - AcWing题库

给定一个如下图所示的全圆量角器。

初始时,量角器上的指针指向刻度 00。

现在,请你对指针进行 nn 次拨动操作,每次操作给定一个拨动角度 aiai,由你将指针拨动 aiai 度,每次的拨动方向(顺时针或逆时针)由你自由决定。

请你判断,能否通过合理选择每次拨动的方向,使得指针最终仍然指向刻度 00。

输入格式

第一行包含整数 nn。

接下来 nn 行,每行包含一个整数 aiai,表示一次操作的拨动角度。

输出格式

如果可以做到指针最终仍然指向刻度 00,则输出 YES,否则输出 NO

数据范围

前 44 个测试点满足 1≤n≤31≤n≤3。
所有测试点满足 1≤n≤151≤n≤15,1≤ai≤1801≤ai≤180。

输入样例1:

3
10
20
30

输出样例1:

YES

输入样例2:

3
10
10
10

输出样例2:

NO

输入样例3:

3
120
120
120

输出样例3:

YES

代码:

#include<bits/stdc++.h>   // 每次都有两种选择,则可以dfs暴搜
using namespace std;
#define endl "\n"

int n, a[20];
bool flag;

void dfs(int u, int s) {
    if(s == n) {
        if(u == 0) {
            if(!flag) {        // 没输出过就输出
                cout << "YES" << endl;  
                flag = true;   // 输出过就标记一下,只能输出一次
                return;
            }
        }
        return;
    }
    dfs((u + a[s] + 360) % 360, s + 1);  // 加上
    dfs((u - a[s] + 360) % 360, s + 1);  // 减去
}

int main() {
    ios::sync_with_stdio(false);
    cout.tie(0);

    cin >> n;

    for(int i = 0; i < n; i ++) cin >> a[i];

    dfs(0, 0);

    if(!flag) cout << "NO" << endl;  // 没被标记过,则没输出过,即不可以

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值