社区讨论

萌新求助红黑树

学术版参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lod85zgb
此快照首次捕获于
2023/10/31 02:19
2 年前
此快照最后确认于
2023/11/05 12:46
2 年前
查看原帖
标题是吸引你点进来的(
用map的时候出现了奇奇怪怪的错误
程序莫名RE 但最神奇的是有输出(输出再后面就是return 0 了
CPP
#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 10;
const int inf = INT_MAX;

#define int long long
#define FOR(i,a,b) for(int i = a;i <= b;i++)
#define _FOR(i,a,b) for(int i = a;i >= b;i--)

template<typename T> void read(T &x)
{
    x = 0;int f = 1;
    char c = getchar();
    for(;!isdigit(c);c = getchar()) if(c == '-') f = -1;
    for(;isdigit(c);c = getchar()) x = x * 10 + c - '0';
    x *= f;
}

struct node
{
	int x,y,num;
	bool operator < (const node &x) const 
	{
		return x.num > num;
	}
};

int mx[] = {0,1,-1,0,0};
int my[] = {0,0,0,1,-1};
priority_queue<node> q;
map<pair<int,int>,int> mp;
int n,m,r,k;
int calc(int x,int y) //有几个网能捞到它
{
	return (min(n,x + r - 1) - max(x,r) + 1) * (min(m,y + r - 1) - max(y,r) + 1);
} 

signed main()
{
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
	read(n),read(m),read(r),read(k);
	int x = (n + 1) >> 1,y = (m + 1) >> 1;
	q.push((node){x,y,calc(x,y)}); mp[make_pair(x,y)] = 1;
	double ans = 0;
	FOR(i,1,k) 
	{
		node tmp = q.top(); q.pop();
		x = tmp.x,y = tmp.y;
		ans += tmp.num;
		FOR(j,1,4) 
		{
			int nx = x + mx[i],ny = y + my[i];
			int qwq = mp[make_pair(nx,ny)];
			if(nx < 1 || nx > n || ny < 1 || ny > m || mp[make_pair(nx,ny)]) continue;
			q.push((node){nx,ny,calc(nx,ny)});
			mp[make_pair(nx,ny)] = 1;
		}
	}
	double tot = (n - r + 1) * (m - r + 1);
	printf("%.10f\n",ans / tot);
	return 0;	
}



回复

4 条回复,欢迎继续交流。

正在加载回复...