codeforces 468A(63/600)

本文介绍了一种通过数学运算使序列中的数最终变为24的游戏算法。针对不同序列长度n提出了具体的实现方案,并通过代码展示了当n为1到5时的具体操作步骤。

Little X used to play a card game called “24 Game”, but recently he has found it too easy. So he invented a new game.

Initially you have a sequence of n integers: 1, 2, …, n. In a single step, you can pick two of them, let’s denote them a and b, erase them from the sequence, and append to the sequence either a + b, or a - b, or a × b.

After n - 1 steps there is only one number left. Can you make this number equal to 24?

Input
The first line contains a single integer n (1 ≤ n ≤ 105).

Output
If it’s possible, print “YES” in the first line. Otherwise, print “NO” (without the quotes).

If there is a way to obtain 24 as the result number, in the following n - 1 lines print the required operations an operation per line. Each operation should be in form: “a op b = c”. Where a and b are the numbers you’ve picked at this operation; op is either “+”, or “-“, or “*”; c is the result of corresponding operation. Note, that the absolute value of c mustn’t be greater than 1018. The result of the last operation must be equal to 24. Separate operator sign and equality sign from numbers with spaces.

If there are multiple valid answers, you may print any of them.

Example
Input
1
Output
NO
Input
8
Output
YES
8 * 7 = 56
6 * 5 = 30
3 - 4 = -1
1 - 2 = -1
30 - -1 = 31
56 - 31 = 25
25 + -1 = 24

只要超过4的都能用
人工打表美滋滋

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    if(n<4)
    {
        cout<<"NO";
        return 0;
    }
    cout<<"YES"<<endl;
    if(n==4)
    {
        cout<<"2 * 3 = 6\n6 * 4 = 24\n";
        cout<<"1 * 24 = 24\n";
        return 0;
    }
    if(n==5)
    {
        cout<<"5 - 1 = 4\n4 - 2 = 2\n";
        cout<<"2 * 3 = 6\n6 * 4 = 24\n";
//      cout<<"1 * 24 = 24\n";
        return 0;
    }
    if(n%2)
    {
        for(int a=6;a<n;a+=2)
        {
            printf("%d - %d = 1\n",a+1,a);
            cout<<"1 * 1 = 1\n";
        }
        cout<<"5 - 1 = 4\n4 - 2 = 2\n";
        cout<<"2 * 3 = 6\n6 * 4 = 24\n";
//      cout<<"1 * 24 = 24\n";
        return 0;
    }
    for(int a=5;a<n;a+=2)
    {
        printf("%d - %d = 1\n",a+1,a);
        cout<<"1 * 1 = 1\n";
    }
    cout<<"2 * 3 = 6\n6 * 4 = 24\n";
    cout<<"1 * 24 = 24\n";
}
Codeforces 平台上,用户查看某道题目的提交记录时,有时会发现某些提交的源显示为 **N/A**。这种现象通常与平台的设计机制和用户权限控制有关。 ### Codeforces显示为 N/A 的原因 1. **比赛期间的提交限制**:在比赛进行过程中,为了防止作弊行为,Codeforces 会限制源的公开访问。此时,非本人的提交记录将无法查看源,显示为 **N/A**。这种机制是为了保证比赛的公平性[^1]。 2. **提交者设置访问权限**:Codeforces 允许用户对自己的提交进行隐私设置,例如仅限本人查看源。如果提交者设置了此类限制,其他用户将无法查看该提交的源内容,显示为 **N/A**。 3. **系统或 API 问题**:在某些情况下,Codeforces 的 API 可能会因为服务器问题或接口更新导致部分数据获取失败,也可能出现源显示为 **N/A** 的情况。 4. **爬虫或第三方工具限制**:使用爬虫或第三方工具获取数据时,可能因为请求频率过高、接口变更或权限不足导致部分信息无法正常获取,从而显示为 **N/A**。 ### 解决方法 1. **等待比赛结束**:若提交记录处于比赛期间,则需等待比赛结束后再尝试查看源。通常在比赛结束后的一段时间内,系统会自动开放源访问权限。 2. **检查用户权限设置**:如果提交者设置了隐私权限,只有提交者本人可以查看源内容。此时建议联系提交者获取源信息,或通过 Codeforces 提供的官方 API 获取更多信息。 3. **优化爬虫逻辑与请求频率**: - 使用 Codeforces 官方提供的 API 接口 `contest.status` 或 `user.status` 获取提交记录时,确保参数传递正确。 - 控制请求频率,避免因频繁请求被服务器拒绝访问。 - 示例代如下: ```python import codeforces def get_submission_details(handle): submissions = codeforces.user.status(handle=handle) for submission in submissions: if submission.verdict == 'OK': print(f"Submission ID: {submission.id}, Source Code: {submission.source}") else: print(f"Submission ID: {submission.id}, Source Code: N/A") ``` 4. **使用官方 API 替代方案**:当第三方工具无法获取完整信息时,建议直接调用 Codeforces 官方 API,确保数据来源的稳定性和完整性。 5. **更新依赖库与工具**:如果使用了封装好的 Codeforces 爬虫库,建议定期更新库版本,确保与 Codeforces 接口保持兼容。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值