HDU 6336 (蛇形填數 二維字首和)

2021-08-25 05:55:38 字數 1597 閱讀 1221

題意:

用乙個給定長l的陣列,對角不斷填充乙個矩陣,求矩陣中某個子矩陣的和。

思路:因為是通過同乙個陣列有規律的填充矩陣,同時子矩陣的範圍也很大,所以思考是否會出現很多相同的矩陣。

然後發現填充矩陣由長為2*l的矩陣重複出現構成,預處理出長2*l的矩陣的二維字首和,就可以推出所有子矩陣的值。

**:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define pb push_back

#define x first

#define y second

#define all(x) x.begin(),x.end()

#define ins(x) inserter(x,x.begin())

#define pii pair#define qclear(a) while(!a.empty())a.pop();

#define lowbit(x) (x&-x)

#define sd(n) scanf("%d",&n)

#define sdd(n,m) scanf("%d%d",&n,&m)

#define sddd(n,m,k) scanf("%d%d%d",&n,&m,&k)

#define mst(a,b) memset(a,b,sizeof(a))

#define cout3(x,y,z) cout<#define cout2(x,y) cout<#define cout1(x) cout<#define ios std::ios::sync_with_stdio(false)

#define srand srand((unsigned int)(time(0)))

typedef long long ll;

typedef unsigned long long ull;

typedef unsigned int uint;

using namespace std;

const double pi=acos(-1.0);

const int inf=0x3f3f3f3f;

const ll mod=1e9+7;

const double eps=1e-8;

const int maxn=1005;

const int maxm=10005;

int cursor = 0;

int m[maxn][maxn];

int sum[maxn][maxn];

int a[maxn];

int l;

int len;

void init()

}for(int i=0;iif(i!=0)}}

}ll cal(int x,int y)

void solve()

init();

int q;

sd(q);

for(int i=0;i}

return ;

}int main()

HDU 33蛇形填數

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 在n n方陳裡填入1,2,n n,要求填成蛇形。例如n 4時方陳為 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 輸入直接輸入方陳的維數,即n的值。n 100 輸出輸出結果是蛇形方陳。樣例輸入 3...

二維陣列 之 蛇形遍歷

例題 用數字1,2,3,4,n n這n2個數蛇形填充規模為n n的方陣。蛇形填充方法為 對於每一條左下 右上的斜線,從左上到右下依次編號1,2,2n 1 按編號從小到大的順序,將數字從小到大填入各條斜線,其中編號為奇數的從左下向右上填寫,編號為偶數的從右上到左下填寫。比如n 4時,方陣填充為如下形式...

本部校賽 蛇形填數(二)problen1338

description 萌萌噠cy 學姐參加去年的新生杯的時候,蛇形矩陣那題被她分分鐘秒掉,於是她決定出乙個更難的題目,她要求矩陣裡的每個數都是質數,當然,蛇形的規則也略有變化 如2 3矩陣 2 7 11 3 5 13 再如3 4 的矩陣2 13 17 37 3 11 19 31 5 7 23 29...