1. 程式人生 > >題解 CF103A 【Testing Pants for Sadness】

題解 CF103A 【Testing Pants for Sadness】

解題思路

首先要知道每次嘗試需要重新再做一遍(要是我就沒有這個耐力),重新做就是把已經做過的題數+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;
}