ZOJ 3157 Weapon
题意:就是CF round# 329 B 的升级版,要求出相交点的个数
分析:逆序数用树状数组维护,求出非逆序数,然后所有情况(n * (n - 1)) / 2减之就是逆序数个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <bits/stdc++.h> using namespace std; const int N = 1e4 + 10; const double EPS = 1e-8; double x[N][2], y[N][2]; pair< double , double > a[N]; double A[N]; struct BIT { int c[N], sz; void init( int n) { sz = n; memset (c, 0, sizeof (c)); } void updata( int i, int x) { while (i <= sz) { c[i] += x; i += i & (-i); } } int query( int i) { int ret = 0; while (i) { ret += c[i]; i -= i & (-i); } return ret; } }bit; int dcmp( double x) { if ( fabs (x) < EPS) return 0; else return x < 0 ? -1 : 1; } double cross( int i, double X) { // if (dcmp (x[i][0] - x[i][1]) == 0) return 0; double k = y[i][1] - y[i][0]; k /= (x[i][1] - x[i][0]); double b = -k * x[i][0] + y[i][0]; return k * X + b; } int main( void ) { int n; while ( scanf ( "%d" , &n) == 1) { for ( int i=0; i<n; ++i) { scanf ( "%lf%lf%lf%lf" , &x[i][0], &y[i][0], &x[i][1], &y[i][1]); } double L, R; scanf ( "%lf%lf" , &L, &R); L += EPS; R -= EPS; for ( int i=0; i<n; ++i) { a[i].first = cross (i, L); a[i].second = cross (i, R); cout << a[i].first << " " << a[i].second << endl; } sort (a, a+n); for ( int i=0; i<n; ++i) A[i] = a[i].second; sort (A, A+n); int tot = unique (A, A+n) - A; bit.init (n); int ans = 0; for ( int i=0; i<n; ++i) { int pos = lower_bound (A, A+tot, a[i].second) - A + 1; ans += bit.query (pos); bit.updata (pos, 1); } printf ( "%d\n" , n * (n - 1) / 2 - ans); } return 0; } |
编译人生,运行世界!
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具