2016 ACM青島區域賽題解
A 水題,直接暴力模擬即可。
B 畫風突然轉變好多了呢!如果細細地想,應該是很難的,但是題目只要求一步之內啊,所以直接模擬就好了#include <bits/stdc++.h> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int maxn=40000; typedef long long ll; int main(int argc, char const *argv[]) { int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); ll ans=0,a,b; for(int i=0;i<n;i++){ scanf("%lld %lld",&a,&b); ans+=(a*b); } printf("%lld\n",ans); } return 0; }
<此處應有程式碼>
C題 :給定一個長度為L的木棒,每次可以擷取最長位D的長度,當剩下長度<=d的時候擷取結束,要求達到要求所需要的擷取次數的期望。
計算概率,這題正統做法我不會,然後根據別人的提示log(2)=0.693147,然後找到了規律,就這還忽略了l<d的一種情況,2A
#include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int maxn=40000; typedef long long ll; const double eps=1e-6; int main(int argc, char const *argv[]) { int T; scanf("%d",&T); while(T--){ double l,d; scanf("%lf %lf",&l,&d); if(l-d<eps){ printf("0.000000\n"); } else{ double ans=log(l/d)+1; printf("%.6f\n",ans); } } return 0; }
正統做法補上:點選開啟連結
D Lucky Coins
題意:有n個種類的硬幣,每i種硬幣有num[i]個,擲硬幣正面朝上的概率為p[i]。
現在對這n種硬幣進行依次進行投擲,如果最後只剩下一種硬幣,那麼這種硬幣就為Lucky Coins,問每一種硬幣成為Lucky Coins的概率是多少。
思路的話十分簡單,首先,我們先計算出到達第k步的時候硬幣i死亡的概率 kill[i][j]=(1−p[i]j)num[i]
我們就可以計算出到達第i步之後i存活的概率 recv[i][j]=1−kill[i][j]
那麼,我們就可以得到某一個硬幣i成為lucky coins的概率 ans[i]=∑j=1max(recv[i][j]−recv[i][j+1)∗∏k=0,k≠inkill[k][j]
這個max是如何確定呢,我們知道所有的概率都在0.4-0.6之間,而總的硬幣的個數在100000之內,我們就可以計算收斂的速度了。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const double eps=1e-6;
const int maxn=10005;
const int maxm=100005;
double kill[12][100000],p[12],live[12][100000],ans[15];
int num[12];
int main(int argc, char const *argv[])
{
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d %lf",&num[i],&p[i]);
}
memset(kill,0,sizeof(kill));
memset(live,0,sizeof(live));
memset(ans,0,sizeof(ans));
if(n==1){
printf("%.6f\n",1.0);
}
else{
for(int i=1;i<=n;i++){
double tmp=p[i];
for(int j=1;j<=100;j++){
kill[i][j]=pow(1-tmp,num[i]);
live[i][j]=1-kill[i][j];
tmp*=p[i];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=75;j++){
double tmp=1.0;
for(int k=1;k<=n;k++){
if(k!=i){
tmp*=kill[k][j];
}
}
ans[i]+=(live[i][j]-live[i][j+1])*tmp;//計算只在第j輪存活的概率
}
}
for(int i=1;i<=n;i++){
printf("%.6f%c",ans[i],i==n?'\n':' ');
}
}
}
return 0;
}
相關推薦
2016 ACM青島區域賽題解
A 水題,直接暴力模擬即可。 #include <bits/stdc++.h> #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int maxn=40000; typede
2016 ACM/ICPC 區域賽(北京) E 題 bfs
解析 一個 區域賽 pac () get 標記 數組 swap https://vjudge.net/problem/UVALive-7672 題意 輸入一個五位數n 問由12345變到n的操作最少次數 不可達輸出-1 有三種操作 1.交換相鄰的位置 次數不限制 2.
2016年青島區域賽 Coding Contest(費用流)
題意:有n個區域,m條邊連線這些區域,這些邊是單向的。現在給出每個區域有多少個選手,多少個午餐。有的區域的選手沒有午餐,所以他們只能去其他區域找午餐。在給定的單向邊上面,有一個流量限制,不能通過超過這個數量的人。而且這些邊上面有網線,只有一個人通過不會對網線有影響,但是有多
2016 acm/icpc 青島網路賽 題解(hdu 5878-5889,9道題)
5878.I Count Two Three(打表預處理,二分) 題目大意:有一些數可以寫成2a3b5c7d的形式,稱之為”I count two three numbers”.輸入一個數,問比他大的最小的”I count two three number
UVALive - 7740 Coding Contest 2016 青島區域賽 (費用流)
endif bool namespace spa pre mat -- stdin main 題意:每個點i有\(s_i\)個人和\(b_i\)份食物,每個人都要找到一份食物.現在有M條有向邊,從點i到點j,容量為c,第一次走過不要緊,從第二次開始就要承擔\(p(0<
ACM 2018 青島區域賽 J-Books (模擬)
ZOJ - 4067 題目大意: DG去書店買書,有n本書按順序放置。買書的策略是從1到n本,遇到價格<=當前手中的錢的書就買 現在告訴你每本書的價格和DG總共買了多少
2016 icpc北京區域賽重現賽---題解
題意: Weiming Lake, also named “Un-named Lake”, is the most famous scenic spot in Peking University. It is located in the north of the c
hdu 5988 Coding Contest【2016青島區域賽現場賽G】【費用流】
題意: 給你N個區域,M條路。接下來N行,每行bi,si,每一區域有bi個人,si個食物。食物是不動的,需要人沿著路去找食物,一人一個。 接下來M行,vi,ui,ci,pi代表vi和ui之間有一條路,最多可以走過ci個人,第一個走過去不會損壞路,之後走過去的人
2016ACM青島區域賽-重現賽(部分題解)
好多題都是數學題。。。看的頭暈眼花。。。。連一個網路流都得用數學方法改變一下去計算。。。 各種概率。。期望。。只能硬著頭皮去寫。。看來要早點學數論了。。。。 A Relic Discovery 水題。。。看程式碼就能懂這題是啥意思了。。。 #include<ios
2017青島區域賽 (部分題解)
vjudge上 題目連結:VJ //垃圾 #include<bits/stdc++.h> using namespace std; int judge(char s[]) { if(strcmp(s,"rat")==0) return 1; el
2016 青島區域賽小結
轉眼大三,又是一場區域賽打下來,本來也沒什麼追求,想拿個銀牌就此光榮退役。。。但時不與我,又是一個擦肩而過,心裡還是莫名有些悲傷,都已經是大三狗的我,該何去何從又是一個值得思量的問題。。。 轉瞬一年時光,猶記得在南陽ccpc賽場上吊車尾的模樣,自那之後好像打
2016中北大學ACM程式設計新生賽題解
新生賽題目地址 a or an 輸入字串後判斷第一個字元是不是’a’,’e’,’i’,’o’,’u’,即可。 #include<algorithm> #include <iostream> #include <cstri
HDU 5988 2016青島區域賽 (最小費用流)
題目連結 分析 這題一看就是一個網路流的模板題,不過需要注意建邊的費用!! 首先很容易想到,s與每個區域連一條邊,費用為0,容量為 si,區域與 t 連一條邊 容量為 bi 費用為0。然後就是考慮區域與區域之間的連邊了。 我們想象一下最終的分配方案,
ACM團隊周賽題解(2)
latin 直接 ios heap cal bsp font 初始 color 拉了CF583和CF486的兩套div2題目 還是先貼宏定義部分 #define MAXN 1000000+5#define MOD 1000000007#define PI (acos(-
【2016 ICPC亞洲區域賽北京站 E】What a Ridiculous Election(BFS預處理)
Description In country Light Tower, a presidential election is going on. There are two candidates, Mr. X1 and Mr. X2, and both of them are not
2018ICPC青島區域賽 zoj4062 Plants vs. Zombies
BaoBao and DreamGrid are playing the game Plants vs. Zombies. In the game, DreamGrid grows plants to defend his garden against BaoBao's zombies.
2018青島區域賽J(BOOK)
#include<bits/stdc++.h> #define inf 0x3f3f3f3f using namespace std; long long sum; int n,m; int num[100009]; int main() { int t; scanf
Tournament ZOJ - 4063 (青島區域賽 F 打表)
打表題。。 規律是找出來了 奈何優化不了 。。。。 #include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #in
2018青島區域賽M:Function and Function
按照題目中所給出的公式來計算數最後會在0和1之間變換,所以只要在數變成1的時候計算剩餘次方數對2取餘是多少就可以知道最後的答案是多少。 #include <stdio.h> int mm[] = {1,0,0,0,1,0,1,0,2,1}; int mmm
2018青島區域賽J:Books
從左到右一次掃n本書,如果當前錢包裡面的錢大於書的價錢,就買下來(必須買),問最多能帶多少錢,錢數必須是非負整數,如果沒有方案,就輸出Impossible,如果可以帶無限的錢,就輸出Richman. 先找出0的個數,因為0元的是必須要買的,如果0的數量大於需要的數量,