t1:
簡單數論,問滿足(a0+a1*b+...+an*b^n)=a0+a1+...+an(mod p)的p的個數
即滿足p|(b-1)a1+(b^2-1)a2+(b^3-1)a3+...,即p|b-1的p的個數
sqrt(b-1)暴力列舉b-1約數即可
t2:現在給若干個條件,xi=xj或xi≠xj,要你將它們劃分成若干組,滿足每個組除去最後乙個條件時成立,否則不成立。
拿並查集將所有相等的點縮起來,對於每個連通塊,掛乙個vector或者set儲存與他不相等的連通塊編號(即並查集的代表元)
啟發式合併,每次將vector小的合併到大的中去,複雜度o(nlognα(n))或o(nlog^2nα(n))(實際不滿)
ps:sb出題人認為最後一組到最後乙個條件若成立就不輸出
#include#include#define maxn 200100
using namespace std;
typedef long long ll;
setst2[maxn];
typedef set::iterator sit;
int l,t,cnt[maxn],f[maxn],a[maxn],b[maxn],c[maxn];
int find(int x)
int main()
if(st2[x].size()>st2[y].size())swap(x,y);
f[x]=y;
for(sit it=st2[x].begin();it!=st2[x].end();++it)
st2[*it].erase(x),st2[*it].insert(y),st2[y].insert(*it);
st2[x].clear();
} else
st2[x].insert(y),st2[y].insert(x);}}
if(pos<=l)pos++;
for(int j=i;j
這個。。。簡單題吧,
首先兩條路徑求交,交集一定是一條路徑,一定是乙個的lca在另一條路徑上,否則交集就是空
那麼維護乙個線段樹,每個節點表示這個區間的路徑求交求出的路徑是什麼
然後普通線段樹那樣做即可
t4:給你個地圖(balabala...)注意「*」翻轉的可達性是所有格仔都要翻轉
這題。。。如果狀壓"*"的狀態的話,我猜想有用的狀態(即可能成為最優)不會很多
於是拿乙個hash表spfa暴力dp一番(可能本質上是真·暴力
然後就過了。。。
#include#define get(x,y) ((x*100)+y)
#define inf 1000000007
using namespace std;
typedef unsigned long long ull;
typedef pairpar;
ull h(ull id,ull s)
unordered_mapdp;
queue>q;
char c[100][100];
int t,n,m,cas,id[100][100],dx[4]=,dy[4]=,flag,edx,edy;
ull pre[100][100];
int main()
x1=0,flag=1;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(c[i][j]=='*')id[i][j]=++x1;
else id[i][j]=0;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j) else if(c[nx][ny]=='*')
}} printf("case #%d:\n%d\n",++cas,ans==inf?-1:ans-1);
}}
t5:不想說了,2-29寫成2-30,智商-1
t6:不想說了,bfs/dfs判一下連通塊即可
#includeusing namespace std;
char c[110][110];
int n,m,vis[110][110],flag;
void dfs(int x,int y,int z)
if(c[x][y]!=z)return ;
vis[x][y]=1;
dfs(x+1,y,z),dfs(x,y+1,z),dfs(x-1,y,z),dfs(x,y-1,z);
}int main() else }}
// printf("[%d,%d,%d]",x0,x1,_x0);
if(_x0==1&&x1==1)printf("0\n");
else if(_x0==0&&x1==1)printf("1\n");
else printf("-1\n");
}}
2017百度之星初賽B場總結
a場因為不可抗力因素 沒能參加,b場還好算是磕磕碰碰地吃著低保過去了,真的菜呀 可以說還是比較一目了然的簽到題,由於這些點的橫縱座標都必須嚴格遞增,那麼我們最多能取到的點就是mi n n,m 個 方案數就相當於是在 max n,m 中選 min n,m 個的方案數,那麼答案就是c max n,m m...
百度之星 初賽B
a 傳送門 點我 求聯通塊個數,對於簡單圖而言,就是c v e,其中c就是聯通塊個數,v是頂點數,e是邊數 include include include include using namespace std const int max n 2e5 10 int n,m,k vectorg max...
2017 百度之星複賽題解 01 03 05
01 有個易錯點,我卡了好久,就是 1 012 1 答案是1012,我剛開始把012的前導0去掉了。03 原題 05 數字dp,記憶化搜尋 dp p q limit ceng 表示前一位是 p,前面處於遞增 遞減 狀態q,當前位上限是多少limit,還有多少位ceng 根據不同情況遞迴即可,可以先不...