Codeforces Round #428 (Div. 2)
阿新 • • 發佈:2017-08-13
printf 意思 mes color out print || 個人 -s
A
題意:給糖果每天最多給8個,給出每天給的個數,問k個糖果最少多少天給完,可以累計,比如我第一天給10個,但我最多可以給8個,另外2個可以累計到後面,如果第二天是6個,但是我可以給8個,就這吊毛意思
思路:暴力模擬
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[102]; 4 int main(){ 5 int n,k; 6 cin>>n>>k; 7 for(int i=1;i<=n;i++){ 8 scanf("%d",&a[i]);9 } 10 int ss=0; 11 for(int i=1;i<=n;i++){ 12 if(a[i]<8) { 13 k-=a[i]; 14 k-=min(ss,8-a[i]); 15 ss=max(0,ss-(8-a[i])); 16 } 17 else { 18 k-=8;ss+=(a[i]-8); 19 } 20 if(k<=0){ 21 cout<<i<<endl;return0; 22 } 23 } 24 cout<<-1<<endl; 25 }
B
題意:每排有 {1,?2}, {3,?4}, {4,?5}, {5,?6} or {7,?8}.的相鄰位置,相鄰位置不能坐不同組的軍人,問是否可行
思路:肯定是先把中間的四個位置能坐就坐,然後中間最多坐3個,2邊還是2個,即能坐2個人的位置s2個,能坐一個人的位置s1個,註意:當我s1不夠,我一個人可以消耗一個2個人的位置,s2--,當我s2不夠的話,我可以消耗2個s1的位置
1 #include<bits/stdc++.h> 2 using namespacestd; 3 4 int a[103]; 5 6 int main(){ 7 int n,k; 8 scanf("%d%d",&n,&k); 9 int m=1; 10 for(int i=1;i<=k;i++){ 11 scanf("%d",&a[i]); 12 while(a[i]>=4&&m<=n){ 13 a[i]-=4; 14 m++; 15 } 16 17 } 18 int s2=n*2+(n-m+1); 19 int s1=(n-m+1); 20 // cout<<s1<<" "<<s2<<endl; 21 for(int i=1;i<=k;i++){ 22 23 if(a[i]==0) continue; 24 else { 25 int x=a[i]/2; 26 if(s2!=0){ 27 if(s2>x) s2-=x; 28 else { 29 x-=s2;s2=0; 30 } 31 } 32 if(s2==0){ 33 s1-=2*x; 34 } 35 if(a[i]%2==1) { 36 37 if(s1==0) s2--; 38 else s1--; 39 // cout<<a[i]<<" "<<s1<<" "<<s2<<endl; 40 } 41 } 42 if(s1<0||s2<0){ 43 cout<<"NO"<<endl;return 0; 44 } 45 } 46 cout<<"YES"<<endl; 47 }
C
題意:一棵樹,從1號節點出發,等概率到他的子節點,只能走沒到過的地方,會一直走,到不能走為止,問距離的期望是多少
思路:跑一遍就行了,記得不要看見函數不加return 心裏就不舒服
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 vector<int > a[100005]; 5 int n; 6 double sum; 7 8 void dfs(int u,int fa,double y,int d){ 9 if(a[u].size()==1){ 10 // printf("%d %.4lf\n",d,y); 11 sum+=y*d; 12 // return ; //就是這個return 啊,WA到死啊 13 } 14 for(int i=0;i<a[u].size();i++){ 15 int v=a[u][i]; 16 if(v==fa) continue; 17 if(u==1) dfs(v,u,y/a[u].size(),d+1); 18 else 19 dfs(v,u,y/(a[u].size()-1),d+1); 20 } 21 } 22 23 int main(){ 24 scanf("%d",&n); 25 int x,y; 26 for(int i=1;i<n;i++){ 27 scanf("%d%d",&x,&y); 28 a[x].push_back(y); 29 a[y].push_back(x); 30 } 31 dfs(1,0,1.0,0); 32 printf("%.6lf\n",sum); 33 }
Codeforces Round #428 (Div. 2)