求助F乱搞
  • 板块学术版
  • 楼主Aisaka_Taiga
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/7/8 22:00
  • 上次更新2023/11/3 10:59:19
查看原帖
求助F乱搞
526519
Aisaka_Taiga楼主2023/7/8 22:00

rt,本人喜欢乱搞,所以打了一个乱搞做法,就是按总和从小到大排序,然后从1开始扫一部分,从r-1开始往前扫一部分,但是不知道为什么,加上注释的部分就会TLE47个点。

#include <bits/stdc++.h>

#define int long long
#define N 1000100

using namespace std;

int n, ff;
struct sb{int a[4], sum = 0;}e[N];

inline int cmp(sb a, sb b) {return a.sum < b.sum;}

signed main()
{
	cin >> n;
	for(int i = 1; i <= n; i ++)
	{
		cin >> e[i].a[1] >> e[i].a[2] >> e[i].a[3];
		e[i].sum = e[i].a[1] + e[i].a[2] + e[i].a[3];
		sort(e[i].a + 1, e[i].a + 4);
	}
	sort(e + 1, e + n + 1, cmp);
	int l = 1, r = n;
	while(1)
	{
		while(l < r - n / 100 && l)
		{
			if(e[l].a[1] < e[r].a[1] && e[l].a[2] < e[r].a[2] && e[l].a[3] < e[r].a[3])
			{
				cout << "Yes" << endl;
//				cout << l << "  " << r << endl;
				return 0;
			}
			else l ++;
		}
//		l = r - 1;
//		while(l > n / 100 && l)
//		{
//			if(e[l].a[1] < e[r].a[1] && e[l].a[2] < e[r].a[2] && e[l].a[3] < e[r].a[3])
//			{
//				cout << "Yes" << endl;
////				cout << l << "  " << r << endl;
//				return 0;
//			}
//			else l --;
//		}
		r --;
		if(r < n / 100) break;
	}
	cout << "No" << endl;
	return 0;
}
2023/7/8 22:00
加载中...