1 条题解

  • 0
    @ 2025-1-8 16:21:12

    一个容易想到的事情是二分。

    我们每次询问平面的一半,能够在log2n=20\log^2n=20的次数找到一个雷。

    那么只需要20m20m次就可以找到所有的雷。

    一个优化是:当当前平面的雷数=0=0或者平面大小的时候就不用继续问了。

    非常好写。

    #include<bits/stdc++.h>
    #define ll long long 
    #define maxn 100005
    #define mod 998244353
    using namespace std;
    int n,m;
    int X,Y;
    void dfs(int l1,int r1,int l2,int r2,int m)
    {
    	if (m==0) return;
    	if ((l2-l1+1)*(r2-r1+1)==m)
    	{
    		for (int i=l1;i<=l2;i++)
    		for (int j=r1;j<=r2;j++)
    			X^=i,Y^=j;
    		return;
    	}
    	if(l2-l1>=r2-r1)
    	{
    		int mid=(l1+l2)/2;
    		cout<<1<<" "<<l1<<" "<<r1<<" "<<mid<<" "<<r2<<endl;
    		int x;
    		cin>>x;
    		dfs(l1,r1,mid,r2,x);
    		dfs(mid+1,r1,l2,r2,m-x);
    	}
    	else
    	{
    		int mid=(r1+r2)/2;
    		cout<<1<<" "<<l1<<" "<<r1<<" "<<l2<<" "<<mid<<endl;
    		int x;
    		cin>>x;
    		dfs(l1,r1,l2,mid,x);
    		dfs(l1,mid+1,l2,r2,m-x);
    	}
    }
    int main()
    {
    	cin>>n>>m;
    	dfs(1,1,n,n,m);
    	cout<<2<<" "<<X<<" "<<Y<<endl;
    }
    

    信息

    ID
    1757
    时间
    1000ms
    内存
    512MiB
    难度
    9
    标签
    (无)
    递交数
    163
    已通过
    12
    上传者