20190814校內模擬賽

2022-07-22 23:45:31 字數 4075 閱讀 3322

\(n\times m\)網格,從左上走到右下,只能往下或往右

有一些障礙物,數量\(\leq 10^5\)

詢問能否到達,\(n,m\leq 10^9\)

直接暴力維護每行可以到達的區間即可

//70pts 離散後暴力算方案數

#include#define ll long long

#define db double

#define reg register

#define dbg1(x) cerr<<#x<<"="<<(x)<<" "

#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"

#define dbg3(x) cerr<<#x<<"\n"

#define int ll

using namespace std;

inline int read()

while(ch<='9'&&ch>='0')

return x*f;

}const int mn=4e5+5,p=19260817;

int mul(int x,int y)

int add(int x,int y)

int nn,mm,n,m,k,x[mn],y[mn];

int num[mn],tot,fac[mn],inv[mn];

bool mp[6005][6005];int f[6000][6005];

int lb(int _)

bool chk()

signed main()

return 0;

}

//100 pts

#include#define ll long long

#define dbg1(x) cerr<<#x<<"="<<(x)<<" "

#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"

#define dbg3(x) cerr<<#x<<"\n"

using namespace std;

#define reg register

inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}const int mn=1e5+5;

struct node

else

}int n=j;

for(i=1,j=2;j<=k;++j)

while(p[i].xp[i].r&&i<=k)++i;}

while(p[i].xp[i].r&&i<=k)++i;}

if(i=p[j].l) p[j].l=max(p[j].l,p[i].l);

else p[j].l=m+1;if(p[j].l>p[j].r) p[j].l=m+1;

} //for(i=1;i<=k;++i)dbg1(p[i].x),dbg1(p[i].l),dbg2(p[i].r);

printf("%lld\n",(p[k].x==n&&p[k].l<=m&&p[k].r==m)?((ll)n+(ll)m-2ll):-1ll);

} return 0;

}

給定\(b\),多組詢問

每個詢問給出\(n\),求出\(\sum_^n if(i)\)

其中\(f(x)=atoi(sort(itoa(x,b)),b)\)

\(itoa(x,b)\)表示把\(x\)轉為\(b\)進製的字串

\(sort(s)\)表示將字串\(s\)按照字典序公升序排序後的字串

\(atoi(s,b)\)表示將字串\(s\)以\(b\)今之形式轉換得到的正整數

對\(998244353\)取模

\(11223446\) 產生了 \(11111111\)(大於等於 \(1\) 的)加\(111111\) (大於等於\(2\)的)加 \(1111\)(大於等於 \(3\)的)加\(111\) (大於等於 \(4\) 的)加 \(1\)(大於等於 \(5\) 的)加 \(1\)(大於等於 \(6\) 的)加 \(0\)(大於等於\(7,8,9\)的)的貢獻。

然後發現仍然是可以數字dp的,就是列舉\(1-9\),算有\(i\)個數字大於等於它的數的一次和(我還算了零次和,便於轉移)是多少,把之前的\(b=2\)的暴力改改就行了。。。

//50 pts dp(b=2)+暴力

#include#define ll long long

#define db double

#define reg register

#define dbg1(x) cerr<<#x<<"="<<(x)<<" "

#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"

#define dbg3(x) cerr<<#x<<"\n"

using namespace std;

inline int read()

while(ch<='9'&&ch>='0')

return x*f;

}const int p=998244353;

int mul(int x,int y)

int add(int x,int y)

int t,b,len[25];

char n[25][1005];

namespace solve1

while(ch<='9'&&ch>='0')

return x*f;

}const int p=998244353;

int mul(int x,int y)

int add(int x,int y)

int t,b;

namespace solve3

void main()

else

for(j=1;j<=l-i;++j)

else}}

for(i=1;i<=l;++i)ans=add(ans,mul(g2[0][i],nm[i]));

}printf("%d\n",ans);

} }}int main()

求乙個矩陣(其中的數是個排列)中有多少的子矩陣\(s\)滿足\(max_s-min_s=siz_s\)

也就是矩陣中的數恰好是連續的一段數

這裡有坑

//大暴力 30pts

#include#define ll long long

#define db double

#define reg register

#define dbg1(x) cerr<<#x<<"="<<" "

#define dbg2(x) cerr<<#x<<"="<<"\n"

#define dbg3(x) cerr<<#x<<"\n"

using namespace std;

inline int read()

while(ch<='9'&&ch>='0')

return x*f;

}int n,m;

ll ans;

namespace solve1 }}

namespace solve2

} for(l=1;l<=n;++l)for(k=1;k<=m;++k)

for(j=k;j<=m;++j)for(ma=0,mi=10001,i=l;i<=n;++i)

}}int main()

return 0*printf("%lld\n",ans);

}

gugugu

gugugugugugu

gugugugugugugugugu

gugugugugugugugugugugugu

......

2018 10 12 校內模擬賽

分析 題一 一道模擬題 但模擬也是有很多坑的 寫出一道題後,一定要自己試很多很多很多組不同的資料 比如這道題,幾乎我試的每一組資料都找出了我程式的bug,好險 分析 題二 好題!應該是和松鼠聚會這道題本質一樣的 首先我們需要推導出任意兩個點 x,y a,b 之間能夠到達彼此所需要走的最短步數,由於可...

1105 校內模擬賽

題一 差分約束or帶權並查集?不啊,zz了,簡單模擬即可 我簡直服了我自己了,想複雜了 直接對每乙個聯通塊隨便找乙個點賦位置,然後dfs繼續找下去,給每乙個點賦值,如果在搜尋的過程中,發現了有衝突,就是impossible了 注意加邊的時候加雙向邊,因為你是從隨便乙個點開始搜尋的 然後這麼簡單的乙個...

2018 9 27 校內模擬賽

a dna 題目大意 給定乙個長度為n,每項值為1或2的數列。有q次詢問,對於每次詢問回答乙個區間 l,r 使得區間內的和等於xi。時間限制 1000ms 空間限制 256mb 編譯指令 開啟o2和c 11 solution 容易發現,若存在乙個權值和為 x x 2 的串,必然存在乙個權值和 為 x...