通過觀察可以發現,假設給的陣列長度為l,如果l為奇數,那麼ll的矩陣週期性出現,如果l為偶數,那麼2l2l的方陣週期性出現,所以我們可以把2l * 2l的方陣存起來,然後寫乙個函式f,這個函式接受乙個點,返回這個點與0,0點所代表的方陣中所有子元素的和,接下來只要運用容斥關係,把四個點扔進這個函式求值即可。
#include #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f
#define n 17
#define m 998244353
#define ll long long
using namespace std;
ll a[10];
ll map[42][42];
ll t,l,q;
ll cnt;
ll pre[21][21];
ll g[21];
ll sum(ll x,ll y)
for(int i=1;i<=2*l;i++)
return g[2*l] * (x/(2*l)) + g[x%(2*l)];
}int main()
cnt = -1;
for(i = 1;i<= 4*l;i++)
}for(i=1;i<=2*l;i++)
}scanf("%lld",&q);
for(i=1;i<=q;i++)
}return 0;
}
HDU 6336 (蛇形填數 二維字首和)
題意 用乙個給定長l的陣列,對角不斷填充乙個矩陣,求矩陣中某個子矩陣的和。思路 因為是通過同乙個陣列有規律的填充矩陣,同時子矩陣的範圍也很大,所以思考是否會出現很多相同的矩陣。然後發現填充矩陣由長為2 l的矩陣重複出現構成,預處理出長2 l的矩陣的二維字首和,就可以推出所有子矩陣的值。include...
hdu 4336 容斥原理
按照解題報告的提示,用容斥原理實現 for int j bg 1 j另解 概率dp,康哥指導的 include include includeusing namespace std double f 1 21 gl 22 int main int i,j,k,n double fz,fm while...
hdu4135 容斥原理
題意 給出a,b,n,求出 a,b 範圍內與n互素的數字的個數。即b範圍內的不與n互素的數減去a範圍內不與n互素的數,把 1,a 1,b 中不與n互素的數分別求出來,再減掉就是和n互素的數了。那麼首先將n分解質因數,因子和因子的倍數可以被除盡,一定不與n互素,把這些數都記下來,篩法求素數即可 然後把...