洛P8109題解

摘自本人洛谷博客,原文章地址:https://www.luogu.com.cn/blog/cjtb666anran/solution-p8109
本題原題目摘錄:

本場比賽共有 \(n\) 道題,Cirno 已經精確預測了每道題目的 AC 隊伍數 \(a_1\) , \(a_2\) , \(a_3\) ... \(a_n\)。但由于經費限制,主辦方 \(n\) 種顏色的氣球分別只準備了個 \(b_1\) , \(b_2\) , \(b_3\) ... \(b_n\)。
首先,定義兩個 \(1e5+1\) 的數組以及一個 \(zh\) 變量計算最多分配氣球數量的總和 。
根據題意分析可得:
  1. 【洛P8109題解】當氣球數大于 AC 隊伍數時,最多可以分配的氣球自然就是 AC 的隊伍數量;
  2. 當 AC 隊伍數大于氣球數量時,最多可以分配的氣球自然就是氣球的數量 。
那么這里的代碼實現就是:
zh+=min(a[i],b[i]);這里的 \(min\) 函數就是用來實現上述的兩種分配可能的 。
以下是 AC 代碼:
#include <bits/stdc++.h>using namespace std;const int N=1e5+1;int a[N],b[N];inline int read() //快讀函數實現{ //這里是模板,在平時優化代碼時可以用到,建議收錄 char ch=getchar(); long long f=1,res=0; while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar(); } while(ch>='0'&&ch<='9')res=(res<<1)+(res<<3)+ch-48,ch=getchar(); return res*f;}int main(){int n;long long zh=0;ios::sync_with_stdio(false);n=read(); //快讀函數的調用for(int i=1;i<=n;i++){a[i]=read();}for(int i=1;i<=n;i++){b[i]=read();zh+=min(a[i],b[i]); //實現兩種可能的分配防作弊標識~}cout<<zh<<endl;return 0;}

    推薦閱讀