\(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...