ACM訓練2021_7_16題解
阿新 • • 發佈:2021-07-16
嚶嚶嚶,被大佬隊爆幹
ACM訓練2021_7_16題解
傳送門:SDUACM(qd) 20210716 熱身訓練2 - Virtual Judge (vjudge.net)
A
沒什麼好說的,一個水題
Source Code:
#include <iostream> #include<bits/stdc++.h> using namespace std; int t,n; bool judge[7]; int main() { cin>>t; while(t--){ memset(judge,false,sizeof(judge)); int ans=0; cin>>n; for(int i=1;i<=6;++i){ if(judge[i]){ break; } if(n-i<=6 && (n-i>0) && n-i>=i){ judge[i]=true; judge[n-i]=true; ans++; } } cout<<ans<<endl; } }
B
不難看出,每\(2n\)次操作後,火鍋內不會剩下任何材料。所以只要先求出\(2n\)次操作後,每個人增加的快樂值\(h[i]\),然後將所有的\(h[i]\)乘\([m/2n]\),後加上\(m\%2n\)的情況,即可算出所有所求的\(h[i]\).
Source Code:
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+7; int t,n,k,m,ans=0; int tourist[maxn],a[maxn],h[maxn],h0[maxn]; void init(){ memset(a,0,sizeof(a)); memset(tourist,0,sizeof(tourist)); memset(h,0,sizeof(h)); } int main(){ cin>>t; while(t--){ cin>>n>>k>>m; init(); for(int i=0;i<n;++i){ cin>>tourist[i]; } for(int i=0;i<2*n;++i){ int tmp=i%n; if(a[tourist[tmp]]==0){ a[tourist[tmp]]++; continue; } if(a[tourist[tmp]]==1){ a[tourist[tmp]]--; h[tmp]++; continue; } } int temp0=m/(2*n); m%=(2*n); for(int i=0;i<n;++i){ h[i]*=temp0; } for(int i=0;i<m;++i){ int tmp=i%n; if(a[tourist[tmp]]==0){ a[tourist[tmp]]++; continue; } if(a[tourist[tmp]]==1){ a[tourist[tmp]]--; h[tmp]++; continue; } } for(int i=0;i<n;++i){ cout<<h[i]; if(i!=n-1) cout<<" "; } cout<<endl; } }
C
不會不會不會