題解 CF103A 【Testing Pants for Sadness】
阿新 • • 發佈:2018-12-02
解題思路
首先要知道每次嘗試需要重新再做一遍(要是我就沒有這個耐力),重新做就是把已經做過的題數+1重複選項數-1遍,加上最後的選項數(不理解可以手動模擬一下,還是用實打實的手寫吧,我拿電腦不便於記錄每步的狀態)。於是可得此遞推式:
n
ans=Σ(a[i]-1)*(i-1)+a[i]
i=1
程式碼實現
時間複雜度O(n),空間複雜度O(1)
#include<bits/stdc++.h> using namespace std; #define ll long long //上面下面的是為了偷懶 #define go(i,j,n,k) for(register ll i=j;i<=n;i+=k) inline ll read(){//讀入優化,有沒有無所謂,用cin就可以 ll x=0,f=1;char ch=getchar(); while(ch>'9'||ch<'0'){if(ch=='-')f=-f;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } ll n,a,ans=0,num; int main(){ n=read(); go(i,1,n,1){ a=read();//輸入,順便直接求和,減少陣列與另一個迴圈 ans+=(a-1)*(i-1)+a;//遞推式 } cout<<ans; return 0; }