抱歉
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4801 Accepted Submission(s): 2133
Problem Description 非常抱歉,本來興沖沖地搞一場練習賽,由于我準備不足,出現很多資料的錯誤,現在這裡換一個簡單的題目:
前幾天在網上查找ACM資料的時候,看到一個中學的奧數題目,就是不相交的曲線段分割平面的問題,我已經發到論壇,并且lxj 已經得到一個結論,這裡就不
多講了,下面有一個類似的并且更簡單的問題:
如果平面上有n個點,并且每個點至少有2條曲線段和它相連,就是說,每條曲線都是封閉的,同時,我們規定:
1)所有的曲線段都不相交;
2)但是任意兩點之間可以有多條曲線段。
如果我們知道這些線段把平面分割成了m份,你能知道一共有多少條曲線段嗎?
Input 輸入資料包含n和m,n=0,m=0表示輸入的結束,不做處理。
所有輸入資料都在32位整數範圍内。
Output 輸出對應的線段數目。
Sample Input
3 2
0 0
Sample Output
3
這題很水,但是我不會做= = 看了discuss才知道歐拉公式,然後惡補了下歐拉公式,給大家分享一下。
歐拉公式有4條
(1)分式:
a^r/(a-b)(a-c)+b^r/(b-c)(b-a)+c^r/(c-a)(c-b)
當r=0,1時式子的值為0
當r=2時值為1
當r=3時值為a+b+c
(2)複數
由e^iθ=cosθ+isinθ,得到:
sinθ=(e^iθ-e^-iθ)/2i
cosθ=(e^iθ+e^-iθ)/2
此函數将兩種截然不同的函數---指數函數與三角函數聯系起來,被譽為數學中的“天橋”.
當θ=π時,成為e^iπ+1=0 它把數學中最重要的e、i、π、1、0聯系起來了.
(3)三角形
設R為三角形外接圓半徑,r為内切圓半徑,d為外心到内心的距離,則:
d^2=R^2-2Rr
(4)多面體
設v為頂點數,e為棱數,f是面數,則
v-e+f=2-2p
p為虧格,2-2p為歐拉示性數,例如
p=0 的多面體叫第零類多面體
p=1 的多面體叫第一類多面體
在多面體中的運用:
簡單多面體的頂點數v、面數f及棱數e間有關系
v+f-e=2
(5)初等數論裡的歐拉公式:
歐拉φ函數:φ(n)是所有小于n的正整數裡,和n互素的整數的個數。n是一個正整數。
歐拉證明了下面這個式子:
如果n的标準素因子分解式是p1^a1*p2^a2*……*pm^am,其中衆pj(j=1,2,……,m)都是素數,而且兩兩不等。則有
φ(n)=n(1-1/p1)(1-1/p2)……(1-1/pm)
利用容斥原理可以證明它。
等等
(1)式很好證明,通過化簡即可得證,這裡不給出證明了。 (2)式不怎麼會用,畢竟複數了解得比較少,隻能死記下公式了。。。 (3)(4)式經常用于計算幾何。
這個題與(4)相似,但不完全一緻,因為(4)式是立體多面體的公式,但我們可以将此題的平面結構推出立體的形态,由于線段是不相交的,是以我們可以考慮成将它沿着這條線對折,成為一個多面體,這樣,多加的一條線段,相當于邊數+1,這樣,面數和頂點數已經給你,讓你找棱數。套套公式,即可解掉此題。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<stack>
#include<queue>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#define eps 1e-8
#define zero(x) (((x>0?(x):-(x))-eps)
#define mem(a,b) memset(a,b,sizeof(a))
#define memmax(a) memset(a,0x3f,sizeof(a))
#define pfn printf("\n")
#define ll __int64
#define ull unsigned long long
#define sf(a) scanf("%d",&a)
#define sf64(a) scanf("%I64d",&a)
#define sf264(a,b) scanf("%I64d%I64d",&a,&b)
#define sf364(a,b,c) scanf("%I64d%I64d%I64d",&a,&b,&c)
#define sf2(a,b) scanf("%d%d",&a,&b)
#define sf3(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define sf4(a,b,c,d) scanf("%d%d%d%d",&a,&b,&c,&d)
#define sff(a) scanf("%f",&a)
#define sfs(a) scanf("%s",a)
#define sfs2(a,b) scanf("%s%s",a,b)
#define sfs3(a,b,c) scanf("%s%s%s",a,b,c)
#define sfd(a) scanf("%lf",&a)
#define sfd2(a,b) scanf("%lf%lf",&a,&b)
#define sfd3(a,b,c) scanf("%lf%lf%lf",&a,&b,&c)
#define sfd4(a,b,c,d) scanf("%lf%lf%lf%lf",&a,&b,&c,&d)
#define sfc(a) scanf("%c",&a)
#define ull unsigned long long
#define debug printf("***\n")
const double PI = acos(-1.0);
const double e = exp(1.0);
const int INF = 0x7fffffff;;
template<class T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a; }
template<class T> T lcm(T a, T b) { return a / gcd(a, b) * b; }
template<class T> inline T Min(T a, T b) { return a < b ? a : b; }
template<class T> inline T Max(T a, T b) { return a > b ? a : b; }
bool cmpbig(int a, int b){ return a>b; }
bool cmpsmall(int a, int b){ return a<b; }
using namespace std;
int main()
{
// freopen("data.in","r",stdin);
ll n,m;
while(~sf264(n,m)&&(n||m))
{
ll ans=n+m-2;
printf("%I64d\n",ans);
}
return 0;
}