社区讨论

一些问题

AT_abc129_d [ABC129D] Lamp参与者 1已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mhjdqlzk
此快照首次捕获于
2025/11/04 00:54
4 个月前
此快照最后确认于
2025/11/04 00:54
4 个月前
查看原帖
这是我昨天下午考试的代码:
CPP
#include <bits/stdc++.h>
#include <cstdio>
#define int long long
#define ull unsigned long long
#define mod 998244353
#define MOD 1000000007
using namespace std;
const int N = 2e6 + 5,maxn = 2e3 + 5;
const double goldnum = (sqrt (5) + 1) / 2;
int a [maxn] [maxn];
vector <int> G1 [maxn],G2 [maxn],G3 [maxn],G4 [maxn];
void exitit ()
{
	fclose(stdin);
	fclose(stdout);
	exit (0);
}
signed main ()
{
	freopen("Lamp.in","r",stdin);
	freopen("Lamp.out","w",stdout);
	int h,w;
	cin >> h >> w;
	for (int i = 1;i <= h;i ++)
	{
		for (int j = 1;j <= w;j ++)
		{
			char c;
			cin >> c;
			if (c == '#')
			{
				a [i] [j] = 1;
				G1 [i].push_back (j);
				G2 [j].push_back (i);
				G3 [i].push_back (w - j + 1);
				G4 [j].push_back (h - i + 1);
			}
		}
	}
	for (int i = 1;i <= h;i ++) sort (G1 [i].begin (),G1 [i].end ()),sort (G3 [i].begin (),G3 [i].end ());
	for (int i = 1;i <= w;i ++) sort (G2 [i].begin (),G2 [i].end ()),sort (G4 [i].begin (),G4 [i].end ());
//	for (int i = 1;i <= w;i ++)
//	{
//		cout << i << ' ' << G2 [i].size () << endl;
//		for (auto p : G2 [i]) cout << p << ' ';
//		cout << endl;
//	}
//	cout << "qqq\n";
//	for (int i = 1;i <= w;i ++)
//	{
//		cout << i << ' ' << G4 [i].size () << endl;
//		for (auto p : G4 [i]) cout << p << ' ';
//		cout << endl;
//	}
	int ans = 0;
	for (int i = 1;i <= h;i ++)
	{
		for (int j = 1;j <= w;j ++)
		{
			int cnt = 0;
			if (a [i] [j]) continue;
//			cout << i << ' ' << j << ' ';
			auto it1 = lower_bound (G1 [i].begin (),G1 [i].end (),j);
			auto it2 = upper_bound (G3 [i].begin (),G3 [i].end (),w - j + 1);
			auto it3 = lower_bound (G2 [j].begin (),G2 [j].end (),i);
			auto it4 = upper_bound (G4 [j].begin (),G4 [j].end (),h - i + 1);
			int x1,x2,x3,x4;
			if (it1 == G1 [i].end ()) x1 = w;
			else x1 = *it1 - 1;
			if (it2 != G3 [i].end ()) x2 = w - (*it2) + 2;
			else x2 = 1;
			if (it3 == G2 [j].end ()) x3 = h;
			else x3 = *it3 - 1;
			if (it4 != G4 [j].end ()) x4 = h - (*it4) + 2;
			else x4 = 1;
			cnt += x1 - x2 + 1;
			cnt += x3 - x4 + 1;
			cnt --;
//			if (it == G1 [i].end ()) cnt += w - j + 1;
//			else
//			{
//				int x = *it;
//				cnt += x - j;
//				cout << x << ' ';
//			}
//			auto it2 = lower_bound (G2 [j].begin (),G2 [j].end (),i);
//			if (it2 == G2 [j].end ())
//			{
//				cout << cnt << ' ';
//				cnt += (h - i + 1);
//				cout << cnt << ' ';
//			}
//			else
//			{
//				int x = *it2;
//				cnt += x - i;
//				cout << 1 << x << ' ';
//			}
//			cnt --;
//			cout << cnt << endl;
			ans = max (ans,cnt);
		}
	}
	cout << ans;
	fclose(stdin);
	fclose(stdout);
	return 0;
}
显然不是正解,然后补测此代码在其他平台对于相同数据可以通过,但是CCR只跑了46pts,就是想知道如果在OI比赛是否会丢分,会挂多少?

回复

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

正在加载回复...