1. 程式人生 > >2016 ACM青島區域賽題解

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;
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;
}
B 畫風突然轉變好多了呢!如果細細地想,應該是很難的,但是題目只要求一步之內啊,所以直接模擬就好了

<此處應有程式碼>

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的數量大於需要的數量,