題意:給定乙個正整數n,請輸出楊輝三角形前n行的偶數個數對1000003取模後的結果。
由於n <= 1e15,這就暗示我們這是一道需要打表找規律的圖。
年輕的花花以為求偶數個數就應當打偶數個數的表,不料這題的規律在於奇數。
所以一張完整的表應當把偶數個數,偶數個數和,奇數個數,奇數個數和,總數全部表示出來。
當行數為2 ^ k時,該行的奇數為2 ^ k個,即全部為奇數,該行的奇數和為3 ^ k 個。
所以當行數為2 ^ k的形式的時候,可以很容易的通過求和公式算出總個數再減去奇數的方式來計算答案。
現在問題要擴充套件到行數不滿足條件的時候
規律就是將行數分為 p = 2 ^ k1 + 2 ^ k2 ....... + 2 ^kn的形式(kn > kn - 1 > .... > k2 > k1)
易得這樣的形式唯一,第p行的奇數和就是 1 * (3 ^ kn) + 2 * (3 ^ kn - 1 ) + ... + pow(2,n - 1) * (3 ^ k1)次。
#include #include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
inline
int read()
#define for(i, x, y) for(int i=x;i<=y;i++)
#define _for(i, x, y) for(int i=x;i>=y;i--)
#define mem(f, x) memset(f,x,sizeof(f))
#define sca(x) scanf("%d", &x)
#define sca2(x,y) scanf("%d%d",&x,&y)
#define sca3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define scl(x) scanf("%lld",&x);
#define pri(x) printf("%d\n", x)
#define prl(x) printf("%lld\n",x);
#define clr(u) for(int i=0;i<=n;i++)u[i].clear();
#define ll long long
#define ull unsigned long long
#define mp make_pair
#define pii pair#define pil pair#define pll pair#define pb push_back
#define fi first
#define se second typedef vector
vi;const
double eps = 1e-9
;const
int maxn = 110
;const
int inf = 0x3f3f3f3f
;const
int mod = 1000003
; ll n;
intcnt;
ll quick_power(ll a,ll b)
return
ans;
}ll solve(
intx)
intmain()
ll sum = (((n + 1) % mod) * (n % mod)) / 2 %mod;
sum = ((sum - ans) % mod + mod) %mod;
prl(sum);
return0;
}
洛谷P1762 偶數 找規律
給定乙個正整數n,請輸出楊輝三角形前n行的偶數個數對1000003取模後的結果。輸入格式 乙個數輸出格式 結果輸入樣例 1 複製6 輸出樣例 1 複製6 對於30 的資料,n 4000 對於70 的資料,n 4 10 9 對於100 的資料,n 10 15 楊輝三角形的前七行 1 1 1 1 2 1...
洛谷 P1762 偶數
洛谷 p1762 偶數 給定乙個正整數n,請輸出楊輝三角形前n行的偶數個數對1000003取模後的結果。輸入格式 乙個數 輸出格式 結果 輸入樣例 1 6 輸出樣例 1 6 對於30 的資料,n 4000 對於70 的資料,n 4 10 9 對於100 的資料,n 10 15 楊輝三角形的前七行 1...
洛谷P1762 偶數
給定乙個正整數n,請輸出楊輝三角形前n行的偶數個數對1000003取模後的結果。輸入格式 乙個數輸出格式 結果輸入樣例 1 複製6 輸出樣例 1 複製6 對於30 的資料,n 4000 對於70 的資料,n 4 10 9 對於100 的資料,n 10 15 楊輝三角形的前七行 1 11 2 1 1 ...