求助ABC E
  • 板块灌水区
  • 楼主alpharchmage
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/12/15 19:23
  • 上次更新2024/12/15 22:28:18
查看原帖
求助ABC E
411141
alpharchmage楼主2024/12/15 19:23
/*
1.能否二分答案?
2.可以倒着思考问题?
3.打一个小表
4.寻找结论
5.是DP & 记忆化搜索吗?
6.是否有单调性?
7.注意取模(数字写没写错 , 是否取了模)
8.能否tarjan缩个点?
9.用一下莫队?
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n = 0 , m = 0 , X = 0;
int p = 0 , q = 0 , ans = 0;
array<array<int , 600> , 600> val , vis;
array<int , 10> dx = {0 , 1 , -1 , 0 , 0};
array<int , 10> dy = {0 , 0 , 0 , 1 , -1};
struct Point{
	int x;
	int y;
	int val;
};
bool operator < (const Point &a , const Point &b)
{
	return a.val < b.val;
}
bool operator > (const Point &a , const Point &b)
{
	return a.val > b.val;
}
priority_queue<Point , vector<Point> , greater<Point> > que;
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin >> n >> m >> X;
	cin >> p >> q;
	for(int i = 1;i <= n;++ i)
	{
		for(int j = 1;j <= m;++ j)
		{
			cin >> val[i][j];
		}
	}
	que.push({p , q , val[p][q]});
	while(!que.empty())
	{
		auto x = que.top().x , y = que.top().y;
		que.pop();
		if(vis[x][y]) continue;
		if(val[x][y] * X < ans || (x == p && y == q))
		{
			que.pop();
			vis[x][y] = true;
			ans += val[x][y];
			for(int k = 1;k <= 4;++ k)
			{
				int nxtx = x + dx[k] , nxty = y + dy[k];
				if(nxtx >= 1 && nxtx <= n && nxty >= 1 && nxty <= m && !vis[nxtx][nxty])
				{
					Point nxt = {nxtx , nxty , val[nxtx][nxty]};
					que.push(nxt);
				}
			}
		}
		else break;
	}
	cout << ans << endl;
	return 0;
} 

先不管long long
这个程序在样例输出答案后RE了?

gdb 信息
warning: Critical error detected c0000374
Thread 1 received signal SIGTRAP, Trace/breakpoint trap.
0x00007fff8c0b877b in ntdll!RtlIsNonEmptyDirectoryReparsePointAllowed () from C:\Windows\SYSTEM32\ntdll.dll

求助万能股民!

样例

3 4 1
1 1
5 10 1 1
10 1 1 1
1 1 1 1

应输出5

2024/12/15 19:23
加载中...