影幾欺哄了眾生了
天以外——
月兒何曾圓缺
有些東西就如同月光的魔法一般.
luke是愛著vijos的.
他想為自己心愛的東西畫些什麼.
就畫n個圓吧.
把它們的圓心都固定在x軸上.
圓與圓.
為了愛,兩兩不能相交.
為了愛,它們可以互相貼在一起.
內切或外切,都是允許的.
vijos的美麗,在於人心.
vijos的孩子們,一定能告訴大家:luke畫的圓究竟把平面分割成了多少塊?
月光恬美地灑在大地上.
luke知道,如果什麼都不畫,平面就只有一塊.多美呢!
luke知道,只畫乙個圓,平面就分成了兩塊.也很美呢!
但luke還是要多畫一些的,因為他真的深愛著vijos呢.
輸入資料第一行:輸出乙個整數n,1<=n<=300,000.表示圓的個數.
之後n行,每一行有2個整數,x[i]和r[i]表示圓心固定在x[i]的位置,半徑為r[i].
-1,000,000,000<=x[i]<=1,000,000,000
1<=r[i]<=1,000,000,000
所有圓都是唯一的,不會出現重疊.
輸出只有一行,要求輸出平面被分割成了多少塊.
21 3
5 1 3
32 21 1
3 1
5
47 5-9 11
關於這道題,我確實花了不少功夫,這道題的關鍵在於所有的圓位置關係只有內切、外切、內含、外含四種關係,不存在兩個圓相互交叉。所以理論上有n個圓,平面就被分成n+1個,之所以多是因為有些圓被其他幾個圓分成了兩個了,看懂這一點就成功了一點了。接下來就是**問題了,我的思路就是先給圓排序,左端點優先,由小到大排。如果左端點相同半徑大的在前面。這之後就請看**吧,相關解釋在**裡面,我覺得更清晰點。6
評測狀態
accepted
題目p1883 月光的魔法
遞交時間
2015-02-27 12:25:33
**語言
c評測機
vijo***
消耗時間
355 ms
消耗記憶體
4948 kib
評測時間
2015-02-27 12:25:35
編譯成功
foo.c: in function 'result':
foo.c:32:15: warning: variable 'k' set but not used [-wunused-but-set-variable]
a[300000]; /*1<=n<=300,000,所以構造乙個盛300000元素的陣列,在這說明一點,這個陣列要在所有函式外面,不要放在主函 數里,否則會報錯,這是因為這個陣列占用空間太大,主函式裡的陣列最多好像只能開到千位,當然這是c(目前我只學了c ,c++剛了解),別的語言還不清楚*/
void
result
(struct yuan a,int n)
;int
cmp(const
void *a,const
void *b)
intmain
() qsort(a,n,sizeof(a[0]),cmp);/*陣列排序,如果是c++的話用sort會更方便也更為穩定,原因可以看看兩個函式 寫cmp函式的區別,一目了然*/
result(a,n);//這個用來尋找有幾個圓被分成了兩個
} return
0;
}void
result
(struct yuan a,int n)
if(a[p].right!=a[j].left)//如果乙個圓平分,那麼平分它的圓應該是連續的
q=j;
if((a[i].right==a[q].right)&&(a[q].left==a[p].right))//判斷該圓是否符合被平分
j++;
if(j>=n)
break;
}if(o)
sum++;
} printf("%d\n",sum);
}
P1883函式題解
這道題是說在 0,1000 中找到乙個值,使得在所有函式中這個值所對應的最大值最小 可能描述的不清楚,詳細看題目 通過畫圖發現,如果將最大值連線起來的話,那麼所有的點將連成乙個類似二次函式的影象,於是我們可以採用三分的方法,如果進行暴力列舉的話會超時,所以使用三分法。為什麼不用二分呢?二分是不能夠判...
洛谷 P1883 函式
給定n個二次函式f1 x f2 x fn x 均形如ax 2 bx c 設f x max,求f x 在區間 0,1000 上的最小值。輸入格式 輸入第一行為正整數t,表示有t 組資料。每組資料第一行乙個正整數n,接著n行,每行3個整數a,b,c 用來表示每個二次函式的3個係數,注意二次函式有可能退化...
ZZULIOJ 1883 蛤瑋當上主席
time limit 1 sec memory limit 128 mb submit 343 solved 231 submit status web board 蛤瑋一直很想當主席,掌管自己的國家.對於乙個富強的國家,擁有屬於自己的貨幣是非常重要的.我們假設蛤瑋的國家的貨幣在流通中只會以自然數的...