关于队里面最菜的在博客打卡第三十五天这件事

题目:Problem - F - Codeforces

这是一道神奇的交互题(第一次见到交互题有1400的),大致题意就是给你一个神奇的未知序列并且长度为n,你需要做的就是最多询问n次,每次询问l,r ,并且 l不能等于r, 最后让你求出最后的序列是什么,这个题要推一些东西,刚开始想每次询问区间长度减去1,,然后求出减去的那个长度的那个数,结果发现最少需要n+1次才能求出来,于是就试了试另一种求法,结果神奇的发现,如果每次询问长度为2,那么可以用n-1次求出ai+ai+1的值,再用一次去求出a1的值,然后再找出来这这些数据中的关系,发现求出长度为2的区间数据 可以减去前面的再加上前面的前面,最后再加上或者减去a1 就可以的出ai, 然后试了一下发现样例可以过就叫了,结果真的过了O。o

题目:

 ac代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdio>

using namespace std;
const int N = 1e3 + 10;
typedef long long int LL ;
LL qz[N];
LL qf[N];
LL ans[N];
int ne[2] = {1,-1};

int main()
{
    int n ;
    cin >> n ;

    for(int i = 1; i <= n-1 ; i ++)
    {
        cout <<'?'<<' '<<i<<' '<<i + 1<<endl;
        cin >> ans[i+1];
        fflush(stdin);
    }
    cout << '?'<<' '<<1<<' '<<3 <<endl;
    cin >> ans[1];
    ans[1] -= ans[3];
    
    int k = 0;
    
    for(int i = 2 ; i <= n ; i++)
    {
        qz[i] = qz[i-1] + ans[i] * ne[k%2];
        k ++ ;
    }

    for(int i = 2 ; i <= n ; i ++)
    {
        if(i % 2 == 0)ans[i] = qz[i] - ans[1];
        else ans[i] = ans[1] - qz[i];
        //if(i % 2 == 0)ans[i] = ans[i] - qz[i-1] + - ans[1];
        //else if(i % 2 == 0)ans[i] = ans[i] - qf[i-1] + ans[1];
    }

    cout <<'!'<<' ';
    for(int i = 1; i <= n ; i ++)cout << ans[i]<<' ';

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值