模擬6月7日

2021-08-20 13:31:46 字數 2564 閱讀 1547

jyx和cyy打賭,比誰24點算得快,算得慢的那個人請客。24點的規則是這樣的:給定4個1..9的整數,用括號改變運算順序,通過加、減、乘、除中的一系列運算,得到整數24。注意所有中間結果必須是整數(例如(2*2)/4是允許的,而2*(2/4)是不允許的)。為了贏得這個比賽,請寫乙個程式幫助我作弊,快速地計算出24點。

輸入格式:

一行4個整數,為給定的4個數字。輸入資料保證有解。

輸出格式:

一行,以字串的形式輸出結果。注意將每一步的運算的括號補齊(例如(3+5)+6和3* (5+6))。如果有多種解答,輸出字典順序最小的乙個。

輸入樣例#1:複製

2 3 5 7

輸出樣例#1:複製

(((3*5)+2)+7)

題目很冗雜;

1/關於字典序的問題我們發現對括號有三種種情況:(((a+b)+c)+d)或((a+b)+(c+d))或(a+(b+(c+d))) 然後會發現第一種和第三種其實是完全等效的。左,中,右,三種;字典序優先,所以選擇第一種;

那麼有兩種入選(((a+b)+c)+d)或((a+b)+(c+d));

第一種是從頭到尾算下來,第二種先前兩個算,接著後兩個算,最後兩邊得到的結果算在一起;

兩種情況要分開打,麻煩沒辦法;

2/數字和運算子交替搜尋是很難想到的;dfs中帶乙個引數是選擇是數字還是字元的,如果是ture則為數字,反之為運算子;

3。用了雜湊,搜尋記錄的是運算子的下標;用乙個函式來運算;

4/出現不能除進ruturn;

#include#include#includeusing namespace std;

int q1[20],q2[20];

char hash[5]=;

int n[5];int used[5];

int operate(int a,int b,int c)

return -10;

}void dfs1(int u,bool o);

void dfs2(int u,bool o);

int main()

void dfs1(int u,bool o)

}else

if(o)

}else

}}void dfs2(int u,bool o)

}else

if(o)

}else

}}

親手打的,懶得標註了

在乙個長方形框子裡,最多有n(0≤n≤6)個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?(不同的油滴不會相互融合)

注:圓的面積公式v=pi*r*r,其中r為圓的半徑。

輸入格式:

第1行乙個整數n。

第2行為長方形邊框乙個頂點及其對角頂點的座標,x,y,x』,y』。

接下去n行,每行兩個整數xi,yi,表示盒子的n個點的座標。

以上所有的資料都在[-1000,1000]內。

輸出格式:

一行,乙個整數,長方形盒子剩餘的最小空間(結果四捨五入輸出)

輸入樣例#1:複製

2

20 0 10 10

13 3

17 7

輸出樣例#1:複製

50

因為沒有單獨討論油滴在另乙個油滴擴充套件的圓內的情況,這種情況就不能擴充套件,不單獨討論會變成負面積

#includeusing namespace std;

double dis[10][10],x,y,x2,y2,a[10][4];//a為點的座標,1為橫座標,2為縱座標,dis油滴間距

double r[100],r,maxn;//r為準備放置的油滴的擴散半徑 ,maxn是最大油面積

int vis[100],n;//vis判斷是否走過

const double pi=acos(-1);

void dfs(int steps,double s)//steps位當前步數,s為當前面積

else

for(int k=1;k<=n;k++)

if(!vis[k])//如果沒拜訪過

r=r<0?0:r; //r不能為負

r[k]=r;//記錄半徑

//搜尋模板

vis[k]=1;

dfs(steps+1,s+pi*r*r);

vis[k]=0;

r[k]=0.0;

}}int main()

}double s=fabs(x-x2)*fabs(y-y2);//矩形面積

dfs(1,0.0);

printf("%.0lf",floor(s-maxn+0.5));

return 0;

}

7月13日模擬賽總結

lgtb與偶數 考慮到連續的一段奇偶性相同的數字才能被刪除,所以直接貪心即可,用棧實現lgtb與序列 考慮到ai最多變成58,如果變成更大的數還不如變成1,而且58之內只有16個素數 並且可以證明對於兩個數a b,變成的數a b 所以最多只有16個最大的數變成素數,其他的數都會變成1 所以直接對於前...

2023年7月6日打卡

乙個機械人位於乙個 m x n 網格的左上角 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角。現在考慮網格中有障礙物。那麼從左上角到右下角將會有多少條不同的路徑?網格中的障礙物和空位置分別用 1 和 0 來表示。說明 m 和 n 的值均不超過 100。原題是有圖的,但是我懶得粘過來,...

7月6日的五題

difficulty 簡單 假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1 1 階 1 階 2 2 階示例 2 輸入 3 輸出 3 解釋 ...