社区讨论
数据疑似过水
P2924 [USACO08DEC] Largest Fence G参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m35qsxqk
- 此快照首次捕获于
- 2024/11/06 18:35 去年
- 此快照最后确认于
- 2025/11/04 15:13 4 个月前
在求极角时没有判象限都过了,代码如下:
CPP// P2924
#include <bits/stdc++.h>
using namespace std;
#define Point seg
const int INF = 0x3f3f3f3f;
struct seg{
int x, y;
int from, to;
Point operator-(Point a){
return {x-a.x, y-a.y, 0};
}
bool operator<(Point a){
if (x == a.x)
return y < a.y;
return x < a.x;
}
};
seg st = {0, 0, 0, 0};
int det(Point a, Point b){
return (a.x*b.y-a.y*b.x);
}
int sgn(int x){
if (abs(x) <= 1e-8)
return 0;
return ((x>0)?(1):(-1));
}
int len(Point a){
return a.x*a.x+a.y*a.y;
}
bool pmc(Point a,Point b){//叉积按照极角由小到大排序
if(sgn(det(a-st,b-st))==0)return len(a)<len(b);
return sgn(det(a-st,b-st))>0;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
pair<int, int> p[n+1];
for (int i=1; i<=n; i++){
cin >> p[i].first >> p[i].second;
}
vector<seg> s;
seg now;
for (int i=1; i<=n; i++){
for (int j=1; j<=n; j++){
if (i == j)
continue;
now.from = i;
now.to = j;
now.x = p[j].first-p[i].first;
now.y = p[j].second-p[i].second;
s.push_back(now);
}
}
sort(s.begin(), s.end(), pmc);
// reverse(s.begin(), s.end());
int m = s.size();
int dp[n+1];
int f[n+1];
int ans = 0;
for (int i=1; i<=n; i++){
memset(dp, 0xf0, sizeof(dp));
memset(f, 0, sizeof(f));
f[i] = 1;
dp[i] = 0;
for (auto j: s){
if (f[j.from]){
dp[j.to] = max(dp[j.to], dp[j.from]+1);
f[j.to] = 1;
}
// dp[j.to] = max(dp[j.to], dp[j.from]+1);
}
ans = max(ans, dp[i]);
}
cout << ans;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...