nowcoder 提高組練習賽-r7
中間空了兩場,因為實在是太難了...
第五場的第二題好像還比較可做,是乙個最小生成樹的結論題,注意到$2^i$可以認為是二進位制下的數,即使把比它小的所有$2^x$全加起來也還是比他小,這一點做題的時候可以用一下.
第六場的第一題是一道很奇怪的題目,給圖上的每條邊賦乙個權值,求從每個點出發的最長路以及整條路徑上所有數字組成乙個高進製數的最大字典序(注意最長路可能有很多條).這道題首先縮點,如果走到環裡了就是無限長,求出最長路,然後建反圖.按照最長路的長度降序排序,再更新前面的值,但是這麼做只有$60$分,因為只考慮了每個點前一條邊的數字大小,如果有兩條邊的數字是一樣的,就成了隨機選擇,但是沿著這條邊接著走時可能就會發現兩條路徑一優一劣了.所以好像還要根據每個點目前的字典序大小對邊排序...?好麻煩啊.
今天的題看起來好像簡單一點?
a:題意概述:小清新模擬題.
1 # include 2 # include 3 # include 4 # includeab:5 # include 6 # include 7 # define r register int
8 # define ll long
long910
using
namespace
std;
1112
const
int dx=;
13const
int dy=;
14const
int maxn=202;15
intn,m,k,r,no,t,x,y,w;
16int
act[maxn][maxn],ope[maxn][maxn],vis[maxn][maxn];
1718
intmain()
1929
for (r i=1;i<=n;++i)
30for (r j=1;j<=m;++j)
31 scanf("
%d",&ope[i][j]);
32 scanf("
%d",&t);
33while(t--)
3441
if(vis[x][y])
4246
if(no<10&&act[x][y]==-1)47
51if(act[x][y]==-1)52
56else no+=act[x][y];
57if(no>=k) no=k;
58 vis[x][y]=true;59
for (r d=0;d<8;++d)
6066
}67 printf("
%d %d
",no,w);
68return0;
69 }
題意概述:每個數字有一種顏色,連到以$1$為根的一棵樹上,每個點的父親必須是它的乙個因數,同一顏色且連在一起的算乙個聯通塊,求通過合理的連邊能製造的最多聯通塊。
看起來像是個很難的題目,但是其實貪心就行,只要能連到顏色不同的父親上就連,不能連就連到$1$上即可.複雜度$o(n\sqrt)$.更合理的做法是對於每乙個數字列舉倍數,運用調和級數計算複雜度$o(nlogn)$
1 # include 2 # include 3 # include 4 # includebc:5 # include 6 # include 7 # define r register int
8 # define ll long
long910
using
namespace
std;
1112
const
int maxn=500005;13
intn,a[maxn],f[maxn],ans,fa,t;
1415
intmain()
1635
if(!fa) f[i]=1;36
}37 printf("%d"
,ans);
38return0;
39 }
題意概述:乙個$n$個點$m$條邊的無權圖,給出多組詢問問是否有從$u$到$v$走恰好$l$步的方案數;$n<=100,q<=1000,l<=10^9$
非常板子的矩陣乘法!然而跑的非常慢,於是首先按照詢問的$l$排序,分段進行矩陣乘法.然而...爆零了!為什麼?離線做之後一定要記得還原成原來的順序輸出!!!
改過來也過不了,聽說改成倍增+$bitset$就過了.最近牛客網怎麼總是出這種有點卡常的題目啊.
1 # include 2 # include 3 # include 4 # includec---shzr5 # include 6 # include 7 # define r register int
8 # define ll long
long910
using
namespace
std;
1112
const
int maxn=104;13
int n,m,u,v,q,l,t[1005
];14
struct
mat15
23}a,ans,y;
24struct
ask25
s[1005
];28
bool
cmp (ask a,ask b)
2932
33mat mul (mat a,mat b)
3444
return
c;45}46
47 mat qui (mat a,int
b)48
57return
ans;58}
5960 inline char
gc()
6168
return *s++;69}
70 inline int
read()
7179
80int
main()
8188 y=a;
89 q=read();
90for (r i=1;i<=q;++i)
91 s[i].l=read(),s[i].u=read(),s[i].v=read(),s[i].id=i;
92 sort(s+1,s+1+q,cmp);
93ans.init();
94for (r i=1;i<=q;++i)
95102
if(ans.a[ s[i].u ][ s[i].v ]) t[ s[i].id ]=1
;103
}104
for (r i=1;i<=q;++i)
105if(t[i]) puts("
yes"
);106
else puts("no"
);107
return0;
108 }
nowcoder 練習賽12 迷宮(bfs)
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 這是乙個關於二維迷宮的題目。我們要從迷宮的起點 s 走到終點 e 每一步我們只能選擇上下左右四個方向中的乙個前進一格。w 代表牆壁,是不能進入的位置,除了...
nowcoder 練習賽8 約數個數的問題
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 題目描述 給個n,求1到n的所有數的約數個數的和 輸入描述 第一行乙個正整數n 輸出描述 輸出乙個整數,表示答案 示例1 輸入輸出 說明樣例解釋 1有1個約數1 2有2...
nowcoder提高組四 滅蟲
題意 3000個在數軸上的點,對於每個點可以選擇這個點向左延伸li長度的線段,或者這個點向右延伸ri長度的線段,問選擇的方法使得最終覆蓋的數軸長度最長,輸入均在int以內。乙個非常巧妙的dp題。首先這一類題目有重複的線段長度統計 或者是樹上的可以相交的路徑方案統計 或者其他內容有乙個比較自然的做法 ...