計蒜客初賽3練習賽

2021-08-02 01:39:10 字數 1364 閱讀 5999

計蒜客初賽5之前選了初賽3的題強行練手,確實這道題對思維的要求不低,要求轉換思路,價值挺大。初賽5成功晉級後,將未完成的**補完,完結此次初賽之旅。

思路:這題明顯是個模擬題,模擬兩個小車的位置。不過,一開始準備寫個程式專門判斷小車位置,考慮到小車方向,時間,並單獨處理碰撞和碰牆情況,由於還看存在半點碰撞和位置重合的情況,這樣模擬十分複雜。

然而,如果換個思路,由於均為彈性碰撞,根據彈性碰撞性質(不要被題目的胡扯所干擾,大小相等方向相反只是巧合,正常情況應該為兩車交換速度),碰後相當於a,b兩車交換,而運動狀態未發生任何變化,不影響兩車之間的距離,因此,單獨模擬兩車運動,完全可以不用考慮碰撞

/*

author:owen_q

*/#include using namespace std;

int l;

int drive(int p,int t,int d)

}return p;

}int main()

printf("%d\n",dis);

}return 0;

}

思路:這題以狼人殺為背景,長篇描述狼人殺,對於我這種不怎麼玩這個遊戲的人來說,莫名感到有點方,然而,讀完題後才發現這題和狼人殺沒有任何關係,只是乙個組合匹配問題

注意到這題n僅為20,o(2^n)的複雜度完全沒有問題,於是考慮到列舉所有組合方式,並用dfs實現以下就ok了,最後注意一下stl中stack的遍歷

/*

author:owen_q

*/#include using namespace std;

const int maxn = 25;

int n,m;

double maxsum;

int w[maxn][maxn];

bool p[maxn];

stackcon;

void dfs(int t,int fig)

return ;

}if(!p[t])

stack temp;

while(!con.empty())

while(!temp.empty())

con.push(t);

dfs(t+1,fig);

con.pop();

return ;

}int main()

maxsum = 0;

for(int i=0;i/*for(int i=0;icout << endl;

}*/for(int i=0;ielse

}dfs(0,0);

printf("%.4f\n",maxsum);

}return 0;

}

計蒜客初賽4練習題

因賬號衝突而遺憾錯過了這場。拿來練練手,稍微了解一下題目難度吧。比賽共兩題,其中第二題有三小問,按情況,一般做出第一題和第二題的第一小問,並加快手速就能晉級了,那就看看這兩部分吧 思路 矩形晶元的放置,一下就想到了之前做過的一道遞推,只需要將遞推從一維推廣到二維即可,用dp即可實現 對於被焊接了的位...

2017計蒜客初賽5

ucloud 剛剛建立乙個新機房,近日正在進行網路搭建。機房內有 n n 臺伺服器和 m m 個分線器,整個機房只有乙個網線出口。分線器的作用是將一根網線轉換成多根網線。蒜頭君也知道每個分線器輸出的最大網線根數 不一定要將分線器輸出的每根線都用上 問你至少需要使用多少個分線器才能使得每台伺服器都有網...

2018計蒜客初賽1

又到了一年一度的計蒜之道,第二次參加計蒜之道,但願今年能在去年的基礎上有個新突破 第一場,由於時間限制,只寫了乙個簽到題,就此拉開了本年度計蒜之道 思路 這題這題其實思路倒是蠻清晰的,就是不斷維護陣列最大值,關鍵就是邊界處理問題,考慮清楚還挺有簽到意味 include include include...