1. 程式人生 > >Codeforces Round #428 (Div. 2)

Codeforces Round #428 (Div. 2)

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;return
0; 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 namespace
std; 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)