用set进行,加上一个小优化,就可以算最近点对,没有特别的数据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
using namespace std;
ll x[maxn],y[maxn];
struct node
{
ll x,y;
bool operator < (const node &u) const{
if(x == u.x) return y < u.y;
return x < u.x;
}
};
int main()
{
int t;
ll n,Ax,Ay,Bx,By,Cx,Cy;
scanf("%d", &t);
while (t--){
set<node> st;
st.clear();
cin>>n>>Ax>>Bx>>Cx>>Ay>>By>>Cy;
//cout<<n<<' '<<Ax<<' '<<Cy<<endl;
//scanf("%I64d%I64d%I64d%I64d%I64d%I64d%I64d", &n, &Ax, &Bx, &Cx, &Ay, &By, &Cy);
x[0] = 0; y[0] = 0;
for (int i = 1; i <= n; ++i){
x[i] = (x[i-1]*Ax + Bx) % Cx;
y[i] = (y[i-1]*Ay + By) % Cy;
}
ll sum = 0;
node tmp;
tmp.x = 0; tmp.y =0;
//st.insert(tmp);
tmp.x = x[1]; tmp.y= y[1];
st.insert(tmp);
ll ans = 1e17;
//cout << ans << endl;
for (ll i = 2; i <= n; ++i)
{
tmp.x = x[i]; tmp.y = y[i];
set<node>::iterator it,ii;
it = st.lower_bound(tmp);
for (ii = it; ii != st.end(); ++ii)
{
if((ii->x-tmp.x) * (ii->x-tmp.x) >= ans) break;
ll dis = (ii->x-tmp.x) * (ii->x-tmp.x) + (ii->y-tmp.y) * (ii->y-tmp.y) ;
ans = min(ans,dis);
}
ii = it;
while (ii != st.begin())
{
ii --;
if((ii->x-tmp.x) * (ii->x-tmp.x) >= ans) break;
ll dis = (ii->x-tmp.x) * (ii->x-tmp.x) + (ii->y-tmp.y) * (ii->y-tmp.y) ;
ans = min(ans,dis);
}
sum += ans;
st.insert(tmp);
}
//printf("%I64dn",sum);
cout << sum << endl;
}
return 0;
}
HDU 4630 No Pain No Game (2013 多校第三场 J)
Posted on
Edited on
1 | /* HDU 4630 2013多校第三场J题 离线 数状数组 |
HDU 4627 The Unsolvable Problem (2013 多校第三场 G)
Posted on
Edited on
1 | /* HDU 4627 2013多校第三场G |
HDU 4628 Pieces (2013 多校第三场 H)
Posted on
Edited on
多校H,状态压缩Dp,先预处理出所有的回文串,然后枚举
1 | /* |
POJ 1191 棋盘分割
Posted on
Edited on
主要是先把方差公式划简一下,然后进行分割,在哪一块割多少刀。
然后一开始出现用方格作为单位的时候出现不能计算x1==x2之类的情况,解决的办法就是做线段的分割,把坐标作为单位
1 | /* POJ 1191 黑书p116 例题 主要是判断如何切 dp数组的维数开得很多 |
POJ 3041 Asteroids
Posted on
Edited on
第一道二分图匹配,求的是最小点覆盖=最大匹配数。用匈牙利跑一遍
1 | /*POJ 3041 二分图匹配第一题 |
就行
HDU 3724 Encoded Barcodes (2010 天津赛区 E)
Posted on
Edited on
算是一个Trie的模板,挺好的,记录出现次数
1 | /* HDU 3724 Encoded Barcodes 字典树 |
HDU 3729 I'm Telling the Truth (2010 天津赛区 J)
Posted on
Edited on
主要是看看这个点有没有被覆盖过了,如果有,看能不能找到增广路。
1 | /* 2010 天津 赛区 J题 匹配的题(新生赛2的J当时是自己把匹配个YY出来了) |
HDU 3723 Delta Wave (2010 天津赛区 D)
Posted on
Edited on
这题也是比赛的时候过得,用java的大数写的,推出之间的递推的一个关系式,然后``就是java了
1 | import java.io.*; |
HDU 3720 Arranging Your Team (2010 天津赛区 A题)
Posted on
Edited on
这题是作为Njust第二场新生赛A,比赛时先写了,写了一半就写不下去了,觉得太恶心,之后才好好写的,写完之后就是1Y
主要就是一个搜索,穷举答案,当有十一个人的时候判断一下就可以
1 | /* a.cpp 2013.07.29 新生赛A 题 |