首页 > 其他分享 >Codeforces Round #846 (Div. 2)

Codeforces Round #846 (Div. 2)

时间:2023-01-27 21:33:08浏览次数:66  
标签:846 cnt cur int Codeforces Div 我们 define

题目链接

D

题意

给定一个数字n,我们需要通过一系列的操作去猜测这个数字。初始的时候会给我们一个cnt,表示二进制下数字n有多少个1.每次我们可以给出一个t,然后另n减去t,系统会给出来这个新的n的cnt。题目问我们原来的n是多少。

核心思路

这其实是一道简单的交互题。首先我们先从最基本的情况入手,我们想怎么确定最后一个位置的1.

我们使用cnt_cur表示现在的1的数目,cnt表示的是刚开始状态的1的数目.
n:10001001000
我们可以减去一个1,就变成了:
10001000111
我们可以发现cur_cnt-cnt=2,而我们的答案是3,所以我们先猜测这个结论是不是就是cur_cnt-cnt+1.
我们进一步模拟倒数第二个位置的情况。
一定要注意我们是根据前面的状态递推出来当前的。
所以我们再来分析10001000111怎么求出来倒数第二个位置。(我们需要知道是要我们求n的导数第二个,而不是这种变化了的状态。)
老样子,减去一个特殊位置的1,这个状态就变为了:
10000111111
cur_cnt-cnt+1=7-3+1=6;
// Problem: D. Bit Guessing Game
// Contest: Codeforces - Codeforces Round #846 (Div. 2)
// URL: https://codeforces.com/contest/1780/problem/D
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define NO {puts("NO") ; return ;}
#define YES {puts("YES") ; return ;}
//#define endl "\n"
#define int long long 


int ask(int num)
{
	cout<<"- "<<num<<endl;
	int x;
	cin>>x;
	return x;
}

void solve()
{
	int cnt;
cin>>cnt;
int bit=1;
int ans=0;
while(cnt)
{
	int cur_cnt=ask(bit);
	ans|=(1<<(cur_cnt-cnt+1));
	bit=1<<(cur_cnt-cnt+1);
	cnt--;
	
}
cout<<"! "<<ans<<endl;
}
signed main()
{
	
	int T=1;
	cin>>T;
	
while(T--)
{
	solve();
}


}

小tips:要记得关闭#define endl "/n".因为这个需要刷新缓存区,而我们的endl是刷新缓存区的。

标签:846,cnt,cur,int,Codeforces,Div,我们,define
From: https://www.cnblogs.com/xyh-hnust666/p/17069377.html

相关文章

  • Codeforces Round #601 (Div. 2) A-E
    比赛链接A题意给两个数字\(a,b\),每次操作可以使\(a\)加上\(+1,+2,+5,-1,-2,-5\)中的一个数,求最少多少次操作可以将\(a\)变成\(b\)。题解知识点:贪心。可以......
  • CodeForces 1415E New Game Plus!
    洛谷传送门CF传送门相当于将\(n\)个数分成\(k+1\)组,将每组的最大收益相加。容易发现组内的数不增最优。考虑开个堆,维护当前\(k+1\)组的和即可。code/*p_b_......
  • CodeForces 1415D XOR-gun
    洛谷传送门CF传送门纯纯的诈骗。下文令\(f(x)\)为\(x\)最高位使得这一位为\(1\)。考虑若存在\(i\in[1,n-2]\)使得\(f(a_i)=f(a_{i+1})=f(a_{i+2})\),那么......
  • Educational Codeforces Round 1
    A.TrickySum题意:给一个n,求1到n的运算,如果不是2的次方就加,否则减思路:由于n有1e9,直接暴力扫过去肯定要寄所以先$n*(n+1)/2$来算出1到n的和再减去2倍的2......
  • 1.27 vp Codeforces Round #845 (Div. 2) and ByteRace 2023
    A-EverybodyLikesGoodArrays!题意(构造)给出序列a,需要使a中元素以相邻元素奇偶性不同排列,你可以进行若干操作:将一对相邻奇偶性相同的元素相乘问最少需要多少次操作......
  • Codeforces 708 A-E1题解
    A.Meximization这道题问给一些数,如何让前缀的mex之和最大,那么首先,我们要抬mex的话肯定是要把前面都铺垫完的,所以在i位置确定的时候,i+1自然是越大越好,可以证明i+1的位......
  • Codeforces Round 846
    目录写在前面ABCDEF写在最后写在前面比赛地址:https://codeforces.com/contest/1780。执念就像是记错的二级结论一样可怕的东西。冥冥之中有一种结论错了的感觉,但总是觉......
  • Codeforces 44E Anfisa the Monkey
    https://codeforces.com/contest/44/problem/E高级又好像很低级的诈骗首先不难得到\(a\timesk>|s|\texttt{or}b\timesk<|s|\)无解。对于每一组考虑先填上\(a\)......
  • Codeforces Round #846 (Div. 2) E. Josuke and Complete Graph(数论分块)
    题意:给定一个区间[L,R],求其中任意两个数字的gcd的不同的种类总数。链接:https://codeforces.com/contest/1780/problem/E其中L<=1e9,1<=L<=R<=1e18。tips:本篇题解中除标......
  • vp CodeForces 合集
    由于这只蒟蒻 非常不想熬夜打CF 经常忘了要打CF,然后再加上能力很踹,于是就弱弱的来vpCF了。(我不会说我vp时用的是这个号)Contest1792 ......