A題:商湯科技致力於引領人工智能核心“深度學習”技術突破,構建人工智能、大數據分析行業解決方案。作爲一家人工智能公司,用機器自動地解決各類實際問題自然不在話下。近日,商湯科技推出了一套安全令牌,令牌如下圖所示:
安全令牌上的小孔有 nnn 行 mmm 列,不過有些行和有些列已經用導線整體焊接了,共有 kkk 根導線。
我們可以在安全令牌上 不重疊 地焊接若干個小芯片,每個芯片需要在相鄰(不能斜着相鄰,必須平行於行或列)的兩個沒有被焊接的小孔上固定。不能固定在已經被整體焊接的行或列上。
安全令牌上最多可以放置多少個芯片,就代表了這個安全令牌對應的校驗碼。當然,由於安全令牌上小孔的密度會很大,是很難目測出對應的校驗碼的。你作爲商湯科技的實習生,需要寫出一個程序,能夠自動地算出一個給定的安全令牌的校驗碼。
輸入格式
輸入第一行三個整數 n,m(1≤n,m≤100)n,m(1 \le n,m \le 100)n,m(1≤n,m≤100),k(0≤k≤n+m)k(0 \le k \le n + m)k(0≤k≤n+m)。
接下來輸入 kkk 行,每行輸入兩個整數 d(0≤d≤1)d(0 \le d \le 1)d(0≤d≤1),ccc。如果 d=0d = 0d=0,表示第 c(1≤c≤n)c(1 \le c \le n)c(1≤c≤n) 行被整體焊接了,如果 d=1d = 1d=1,表示第 c(1≤c≤m)c(1 \le c \le m)c(1≤c≤m) 列被整體焊接了。
輸出格式
輸出安全令牌對應的校驗碼。
樣例輸入
4 5 2 0 3 1 4
樣例輸出
5
解題思路:安全令牌分割成爲若干個獨立的矩形區域。一個矩形區域如果長和寬都是奇數,那麼就會多出一個小孔,否則每個小孔都能用上。
#include
#define MAXSIZE 100
int map[MAXSIZE+1][MAXSIZE+1],n,m;
int dfs(int i,int j){
if(i<=0||i>n||j<=0||j>m){
return 0;
}
if(map[i][j]==1){
return 0;
}
else{
map[i][j]=1;
return 1+dfs(i+1,j)+dfs(i,j+1);
}
}
int main()
{
int k,i,j,count=0,d,c;
scanf("%d %d %d",&n,&m,&k);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
map[i][j]=0;
}
}
for(i=0;i
B題:
商湯科技近日推出的 SenseVideo 能夠對視頻監控中的對象進行識別與分析,包括行人檢測等。在行人檢測問題中,最重要的就是對行人移動的檢測。由於往往是在視頻監控數據中檢測行人,我們將圖像上的行人抽象爲二維平面上若干個的點。那麼,行人的移動就相當於二維平面上的變換。
在這道題中,我們將行人的移動過程抽象爲 平移,有兩個 移動參數:dxd_xdx 和 dyd_ydy。每次行人的移動過程會將行人對應的所有點全部平移,對於平移前的點 (x,y)(x, y)(x,y),平移後的座標爲 (x+dx,y+dy)(x + d_x, y + d_y)(x+dx,y+dy)。
我們現在已知一個行人對應着 nnn 個點,座標分別爲 (x1,y1),(x2,y2)…(xn,yn)(x_1,y_1),(x_2,y_2)\ldots (x_n,y_n)(x1,y1),(x2,y2)…(xn,yn),平移後的座標分別爲 (x1′,y1′),(x2′,y2′)…(xn′,yn′)(x_1',y_1'),(x_2',y_2')\ldots (x_n',y_n')(x1′,y1′),(x2′,y2′)…(xn′,yn′)。
很顯然,通過平移前後的正確座標,很容易算出行人的移動參數,但問題沒有這麼簡單。由於行人實際的移動並不會完全按照我們預想的方式進行,因此,會有一部分平移後的座標結果不正確,但可以確保 結果不正確的座標數量嚴格不超過一半。
你現在作爲商湯科技的實習生,接手了這個有趣的挑戰:算出行人的移動參數。如果不存在一組合法的移動參數,則隨意輸出一組參數;如果有多種合法的移動參數,輸出其中任意一組合法的即可。
輸入格式
第一行輸入一個整數 n(1≤n≤105)n(1 \le n \le 10^5)n(1≤n≤105),表示行人抽象出的點數。
接下來 nnn 行,每行 444 個 整數。前兩個數表示平移前的座標,後兩個數表示平移後的座標。
座標範圍在 −109-10^9−109 到 10910^9109 之間。
輸出格式
一行兩個整數,dxd_xdx 和 dyd_ydy,表示行人的移動參數。
樣例輸入
5 0 0 1 1 0 1 1 2 1 0 2 1 1 1 0 0 2 1 1 0
樣例輸出
1 1
本題給定 nnn 對變換前後的二維點,要求在有一定容錯(錯誤的點對數嚴格不超過一半)的情況下,對變換進行復原。其關鍵條件在於對容錯率的限制:錯誤的點對數嚴格不超過一半。由於只有平移,我們可以首先計算出每對點對應的平移量。由於錯誤的點對數嚴格不超過一半,我們可以直接統計 nnn 組平移量中的衆數,即可得到答案。
本題還可以通過限制內存,要求大家在常數內存下完成。只需要一個計數器和一個與計數器對應的平移量即可。每次讀入一個點對,計算新的平移量。
(1)若此時計數器爲 000,則存下這個平移量,計數器修改爲 111;
(2)若此時計數器不爲 000,則檢查是否與存着的平移量相同:如果相同,則計數器加一;否則減一。最終倖存下來的平移量即爲答案。
#include
typedef struct{
int x;
int y;
int num;
}node;
node str[100001];
int count=0;
int main()
{
int n,i,j,a,b;
int x1,x2,x3,x4,flag;
scanf("%d",&n);
for(i=0;i=n){
printf("%d %d",str[i].x,str[i].y);
break;
}
}
}