国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站制作策劃今日熱點(diǎn)

網(wǎng)站制作策劃,今日熱點(diǎn),重慶企業(yè)做網(wǎng)站,正版全平臺(tái)內(nèi)容系統(tǒng)還有些沒補(bǔ)的題以后回來補(bǔ)。 索引 1001100210031005100910101012 1001 感覺是大暴力題,數(shù)據(jù)范圍給的很小所以每次可以暴力求出兩人的路徑。枚舉路徑的交集里的點(diǎn)然后看看兩個(gè)人在這個(gè)點(diǎn)相遇需要的最短時(shí)間就可以了。確定了具體的點(diǎn)之后求 4 4 4 次exgcd即可知道答…

還有些沒補(bǔ)的題以后回來補(bǔ)。

索引

      • 1001
      • 1002
      • 1003
      • 1005
      • 1009
      • 1010
      • 1012

1001

感覺是大暴力題,數(shù)據(jù)范圍給的很小所以每次可以暴力求出兩人的路徑。枚舉路徑的交集里的點(diǎn)然后看看兩個(gè)人在這個(gè)點(diǎn)相遇需要的最短時(shí)間就可以了。確定了具體的點(diǎn)之后求 4 4 4 次exgcd即可知道答案(分別看兩個(gè)人是在 來/回 的路上相遇)。

代碼如下:

#include <bits/stdc++.h>
using namespace std;
#define maxn 200010
#define inf 999999999#define cn getchar
template<class TY>void read(TY &x){x=0;int f1=1;char ch=cn();while(ch<'0'||ch>'9'){if(ch=='-')f1=-1;ch=cn();}while(ch>='0'&&ch<='9')x=x*10+(ch-'0'),ch=cn(); x*=f1;
}
template<class TY>void write2(TY x){if(x>9)write2(x/10);putchar(x%10+'0');
}
template<class TY>void write(TY x){if(x<0)putchar('-'),x=-x;write2(x);
}
int T,n,m;
struct edge{int y,next;}e[maxn<<1];
int first[maxn],et;
void buildroad(int x,int y){e[++et]=(edge){y,first[x]};first[x]=et;
}
int fa[maxn],dep[maxn];
void dfs(int x){for(int i=first[x];i;i=e[i].next){int y=e[i].y;if(y==fa[x])continue;fa[y]=x;dep[y]=dep[x]+1;dfs(y);}
}
vector<int> A,B;
int sta[maxn],t=0;
void get_path(int S,int T,vector<int> &d){int x=S,y=T;d.clear();while(dep[x]>dep[y])d.push_back(x),x=fa[x];while(dep[x]<dep[y])sta[++t]=y,y=fa[y];while(x!=y){d.push_back(x);x=fa[x];sta[++t]=y;y=fa[y];}d.push_back(x);while(t)d.push_back(sta[t--]);
}
int inA[maxn],inB[maxn];
int exgcd(int a,int b,int &x,int &y){if(b==0){x=1;y=0;return a;}int g=exgcd(b,a%b,y,x);return y-=a/b*x,g;
}
int calc(int a,int l1,int b,int l2){int x,y;a<<=1;b<<=1;int g=exgcd(a,b,x,y);if(abs(l2-l1)%g)return inf;x*=(l2-l1)/g,y*=(l2-l1)/g;x-=x/(b/g)*(b/g);if(x<0)x+=b/g;return a*x+l1;
}int main()
{read(T);while(T--){read(n);read(m);for(int i=1;i<=n;i++)first[i]=0;et=0;for(int i=1;i<n;i++){int x,y;read(x);read(y);buildroad(x,y);buildroad(y,x);}dfs(1);for(int i=1;i<=m;i++){int Sa,Ta,Sb,Tb;read(Sa);read(Ta);read(Sb);read(Tb);get_path(Sa,Ta,A);get_path(Sb,Tb,B);for(int j=1;j<=n;j++)inA[j]=inB[j]=-1;for(int j=0;j<A.size();j++)inA[A[j]]=j;for(int j=0;j<B.size();j++)inB[B[j]]=j;int lenA=A.size()-1,lenB=B.size()-1;int ans=inf;for(int j=1;j<=n;j++)if(inA[j]!=-1&&inB[j]!=-1){ans=min(ans,calc(lenA,inA[j],lenB,inB[j]));if(inA[j]!=0&&inA[j]!=lenA)ans=min(ans,calc(lenA,2*lenA-inA[j],lenB,inB[j]));if(inB[j]!=0&&inB[j]!=lenB)ans=min(ans,calc(lenA,inA[j],lenB,2*lenB-inB[j]));if(inA[j]!=0&&inA[j]!=lenA && inB[j]!=0&&inB[j]!=lenB)ans=min(ans,calc(lenA,2*lenA-inA[j],lenB,2*lenB-inB[j]));}if(ans==inf)puts("-1");else{ans%=lenA*2;if(ans>lenA)write(A[2*lenA-ans]);else write(A[ans]);puts("");}}}
}

1002

很裸的樹形dp,感覺應(yīng)該有原題叭(

設(shè) f i , 0 / 1 / 2 f_{i,0/1/2} fi,0/1/2? 表示 i i i 點(diǎn)沒有被cover, i i i 自己這里放了路由器, i i i 被某個(gè)兒子cover了的情況,轉(zhuǎn)移可以看代碼:

#include <bits/stdc++.h>
using namespace std;
#define maxn 200010int n,a[maxn];
vector<int> to[maxn];
long long f[maxn][3];
void dfs(int x,int fa){f[x][0]=f[x][2]=0;f[x][1]=a[x];long long mi=1e10;//注意這個(gè)inf值別給太大了,之前給1e18還WA了一發(fā),因?yàn)榧偃缬幸粋€(gè)點(diǎn)下面掛了很多個(gè)葉子那他的f[x][0]就會(huì)爆炸了for(int y:to[x])if(y!=fa){dfs(y,x);f[x][0]+=f[y][2];f[x][1]+=min(min(f[y][0],f[y][1]),f[y][2]);if(f[y][1]<=f[y][2])f[x][2]+=f[y][1],mi=0;else f[x][2]+=f[y][2],mi=min(mi,f[y][1]-f[y][2]);}f[x][2]+=mi;
}int main()
{int T;cin>>T;while(T--){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]),to[i].clear();for(int i=1;i<n;i++){int x,y;scanf("%d %d",&x,&y);to[x].push_back(y);to[y].push_back(x);}dfs(1,0);printf("%lld\n",min(f[1][1],f[1][2]));}
}

1003

這題其實(shí)不是很難,但賽時(shí)看過的人少就沒怎么看,最后一點(diǎn)時(shí)間看的時(shí)候就感覺應(yīng)該可以做,但是dp方向想錯(cuò)了一點(diǎn),時(shí)間不夠接著思考了。

實(shí)際上就是考慮dp, f l , r , k , r f_{l,r,k,r} fl,r,k,r? 表示 [ l , r ] [l,r] [l,r] 區(qū)間內(nèi)消得只剩一張 k k k r r r 級(jí)牌的最優(yōu)貢獻(xiàn),另外多一種狀態(tài)是 f l , r , 0 , 0 f_{l,r,0,0} fl,r,0,0? 表示 [ l , r ] [l,r] [l,r] 區(qū)間內(nèi)啥也不剩的最優(yōu)貢獻(xiàn),很容易就能得到轉(zhuǎn)移,復(fù)雜度是 P ( n 3 m R ) P(n^3mR) P(n3mR),無壓力過。

代碼如下:

#include <bits/stdc++.h>
using namespace std;
#define ll long longint n,m,R,P;
int a[110],V[110];
ll f[110][110][21][8];
int pw[9];int main()
{int T;cin>>T;while(T--){cin>>n>>m>>R>>P;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=m;i++)cin>>V[i];R=min(R,6);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)for(int k=0;k<=m;k++)//注意初始化別忘記 f[i][j][0][0] 的情況for(int r=0;r<=R;r++)f[i][j][k][r]=-1e13;for(int i=1;i<=n;i++)f[i][i][a[i]][1]=0,f[i][i][0][0]=V[a[i]];pw[0]=1;for(int i=1;i<=R;i++)pw[i]=pw[i-1]*P;for(int len=2;len<=n;len++){for(int i=1;i+len-1<=n;i++){int j=i+len-1;for(int k=1;k<=m;k++)for(int r=1;r<=R&&(1<<r-1)<=len;r++){for(int p=i;p<j;p++){f[i][j][k][r]=max(f[i][j][k][r],f[i][p][k][r]+f[p+1][j][0][0]);f[i][j][k][r]=max(f[i][j][k][r],f[i][p][0][0]+f[p+1][j][k][r]);f[i][j][k][r]=max(f[i][j][k][r],f[i][p][k][r-1]+f[p+1][j][k][r-1]);}if(f[i][j][k][r]>=0)f[i][j][0][0]=max(f[i][j][0][0],f[i][j][k][r]+1ll*V[k]*pw[r-1]);}}}cout<<f[1][n][0][0]<<'\n';}
}

1005

將每個(gè)已知串哈希一下放到map里,每次O(1)查詢即可。

但是似乎沒有什么很好的環(huán)哈希技術(shù),只能先求個(gè)最小表示法再用串哈希了。

代碼很簡(jiǎn)單就不貼了。

1009

用鴿巢原理判斷一下即可,

1010

x j ≥ x j + 1 x_j\geq x_{j+1} xj?xj+1?可以得到一個(gè)很經(jīng)典的性質(zhì): [ a i ≥ x j ] [a_i\geq x_j] [ai?xj?] 的值,只可能形如 1 , 1 , 1 , 0 , 0 , 0 , 0 , . . . 1,1,1,0,0,0,0,... 1,1,1,0,0,0,0,...,也就是至多發(fā)生一次轉(zhuǎn)換。

那么也很經(jīng)典的用線段樹來維護(hù)就行, a i ≥ x j a_i\geq x_j ai?xj? 時(shí)每次操作相當(dāng)于區(qū)間減,每次看看區(qū)間內(nèi)最小值是否 < x j <x_j <xj?,是的話暴力進(jìn)去修改成 a i < x j a_i<x_j ai?<xj? 類的點(diǎn),這一類點(diǎn)每次操作相當(dāng)于區(qū)間取反并且 + x j +x_j +xj?。

隊(duì)友寫的代碼,有空再補(bǔ)。

1012

是一類很經(jīng)典的博弈的幾乎板子題,但我居然沒見過啊可惡,

一棵樹每次刪掉一條邊 以及去掉所有不和根節(jié)點(diǎn)相連的點(diǎn),不能操作者敗。

考慮SG函數(shù),假如子樹是一條鏈,那么SG值顯然是總邊數(shù),這個(gè)相當(dāng)于 Nim 游戲只有一堆石子的情況。

對(duì)于一個(gè)點(diǎn),如果有多個(gè)兒子,先遞歸進(jìn)去求他們的SG值,假如一個(gè)兒子SG值為 p p p,那么其實(shí)可以直接將子樹看做一條長度為 p p p 的鏈,那么這個(gè)點(diǎn)的SG值就是 S G x = ⊕ y ∈ s o n ( S G y + 1 ) SG_x=\oplus_{y\in son} (SG_y+1) SGx?=yson?(SGy?+1),因?yàn)槊總€(gè)兒子的鏈相當(dāng)于多了一條邊,那么SG值自然就+1,然后根據(jù)經(jīng)典的博弈結(jié)論,直接將他們的新SG值異或起來就得到這個(gè)點(diǎn)的SG值了。


看回這個(gè)題,每次刪掉一棵子樹+不可操作者獲勝其實(shí)等價(jià)于上面的每次刪掉一條邊以及對(duì)應(yīng)的子樹+不可操作者失敗。

所以用一個(gè)換根dp求一下每個(gè)點(diǎn)的SG值即可求出答案。

代碼很簡(jiǎn)單就不貼了。

http://aloenet.com.cn/news/42755.html

相關(guān)文章:

  • 南寧微信網(wǎng)站制作網(wǎng)頁制作軟件推薦
  • 去哪兒網(wǎng)站開發(fā)中國國家培訓(xùn)網(wǎng)靠譜嗎
  • 福州手機(jī)網(wǎng)站建設(shè)最新國內(nèi)新聞事件今天
  • 網(wǎng)站店鋪分布圖怎么做網(wǎng)絡(luò)營銷專業(yè)是學(xué)什么的
  • java做的k線圖網(wǎng)站源碼下載seo搜索引擎是什么
  • 為什么做電影網(wǎng)站沒有流量嗎東莞百度seo電話
  • 做網(wǎng)站搞什么流量百度競(jìng)價(jià)點(diǎn)擊軟件奔奔
  • 網(wǎng)站是如何建立的山東做網(wǎng)站
  • 網(wǎng)站企業(yè)備案代理短視頻拍攝剪輯培訓(xùn)班
  • 溫州網(wǎng)站制作多少錢谷歌google 官網(wǎng)下載
  • 手機(jī)html5網(wǎng)站源碼廣告投放的方式有哪些
  • 深圳網(wǎng)站建設(shè)培訓(xùn)班深圳最新通告今天
  • 技術(shù)支持:淄博網(wǎng)站建設(shè)優(yōu)化設(shè)計(jì)三年級(jí)上冊(cè)語文答案
  • 山東省建設(shè)工程招標(biāo)中心網(wǎng)站當(dāng)日網(wǎng)站收錄查詢統(tǒng)計(jì)
  • 網(wǎng)站建設(shè)需求分析寫什么茶葉seo網(wǎng)站推廣與優(yōu)化方案
  • 網(wǎng)站程序組成seo搜狗排名點(diǎn)擊
  • 辛集seo網(wǎng)站優(yōu)化電話靠譜的免費(fèi)建站
  • 建立手機(jī)個(gè)人網(wǎng)站營銷網(wǎng)站建設(shè)制作
  • 視頻資源的網(wǎng)站怎么做站長資訊
  • 網(wǎng)站建設(shè)課程設(shè)計(jì)內(nèi)容淘寶店鋪轉(zhuǎn)讓價(jià)格表
  • wordpress評(píng)論框文件采集站seo課程
  • 自己做網(wǎng)站外包百度熱搜高考大數(shù)據(jù)
  • 企業(yè)做網(wǎng)站需要什么軟件百度品牌廣告收費(fèi)標(biāo)準(zhǔn)
  • 網(wǎng)站制作預(yù)付款會(huì)計(jì)分錄小程序運(yùn)營推廣公司
  • 大慶網(wǎng)站制作營銷策劃方案包括哪些內(nèi)容
  • 在百度做網(wǎng)站多少錢網(wǎng)站推廣營銷
  • 網(wǎng)站站內(nèi)鏈接濰坊住房公積金管理中心
  • 設(shè)計(jì)網(wǎng)頁推薦萬秀服務(wù)不錯(cuò)的seo推廣
  • 網(wǎng)站的功能和作用百度seo排名帝搜軟件
  • 寶雞哪有有做網(wǎng)站的專業(yè)網(wǎng)絡(luò)推廣公司