切蛋糕
阿新 • • 發佈:2018-10-24
microsoft span 覆蓋 sof clu 會有 問題 什麽 obi
問題描述
一塊邊長是2L的正方形蛋糕落在坐標軸內,中心在原點上,現在你豎直切了m次,水平切了n次,中間還挖出了一個長度是2P的正方形的洞,洞的中心也在原點上。求最終蛋糕分成了幾塊。
輸入格式
輸入cake.in共四行。
第一行一個數L,第二行一個數P
第三行n個數,表示水平切的位置
第四行m個數,表示豎直切的位置
輸出格式
一個數,表示最終那個蛋糕的個數
樣例輸入
5
3
1 -4
1
樣例輸出
6
數據範圍
30% 的數據 L,P≤10,1≤n,m≤2
100%的數據 1≤L,P,1≤n,m≤100
題解
假設中間沒有挖掉一個正方形的洞,那麽,最終會有(n+1)*(m+1)個蛋糕。
而事實上中間挖掉一個正方形的洞,這對答案會有什麽影響呢?
如圖,
有幾個小蛋糕完全被正方形的洞覆蓋了,這些蛋糕不能算入答案的總個數。
假設水平切有px次經過挖掉的洞,豎直切有py次經過挖掉的洞,顯然,完全被正方形覆蓋的校蛋糕有(px-1)*(py-1)個;
最終答案就是(n+1)*(m+1)減去完全被洞覆蓋的蛋糕數。
1 #include <string> 2 #include <cstdio> 3 int L,P,ans,x[105],y[105],xt,yt,px,py; 4 bool visx[200],visy[200],vis;5 int main() 6 { 7 int res,i,j,f; 8 char ch; 9 bool fg,mak; 10 scanf("%d%d\n",&L,&P); 11 for (ch=getchar();ch!=‘\n‘;ch=getchar()) 12 { 13 res=0; f=1; 14 while ((ch<‘0‘ || ch>‘9‘) && ch!=‘-‘ && ch!=‘\n‘) ch=getchar();15 if (ch==‘\n‘) break; 16 if (ch==‘-‘) f=-1,ch=getchar(); 17 while (ch>=‘0‘ && ch<=‘9‘) 18 res=res*10+ch-‘0‘,ch=getchar(); 19 res*=f; 20 if (!visx[res+100]) visx[res+100]=1,x[++xt]=res; 21 if (ch==‘\n‘) break; 22 } 23 for (ch=getchar();ch!=‘\n‘;ch=getchar()) 24 { 25 res=0; f=1; 26 while ((ch<‘0‘ || ch>‘9‘) && ch!=‘-‘ && ch!=‘\n‘) ch=getchar(); 27 if (ch==‘\n‘) break; 28 if (ch==‘-‘) f=-1,ch=getchar(); 29 while (ch>=‘0‘ && ch<=‘9‘) 30 res=res*10+ch-‘0‘,ch=getchar(); 31 res*=f; 32 if (!visy[res+100]) visy[res+100]=1,y[++yt]=res; 33 if (ch==‘\n‘) break; 34 } 35 for (i=1;i<=xt;i++) 36 if (-P<=x[i] && x[i]<=P) 37 px++; 38 for (i=1;i<=yt;i++) 39 if (-P<=y[i] && y[i]<=P) 40 py++; 41 if (px<1) px=1; 42 if (py<1) py=1; 43 printf("%d",(xt+1)*(yt+1)-(px-1)*(py-1)); 44 return 0; 45 }
切蛋糕