a.牛牛愛字串
題意:給定字串,輸出當中的數字,注意不能有前導零。
簡單模擬題,但格式要求非常嚴格,最後乙個數字後不能有空格。還有乙個坑點,如果只有0也是要輸出乙個0的。
我是用佇列模擬, 去掉前導零。
#include
using
namespace std;
const
int n =
1e5+10;
string s;
queue<
int> st[n]
;int
main()
}for
(int i =
0; i <= k; i++)}
int f =0;
if(st[k]
.size()
) f =1;
for(
int i =
0; i <= k; i++)if
(f && i != k) cout <<
" ";
elseif(
!f && i < k -
1) cout <<
" ";
} cout << endl;
}}
b.牛牛愛位運算
題意:任選n個數,要求&起來最大。
已知與只會變小,所以取乙個最大值就可以.
#include
using
namespace std;
int t;
intmain()
}
c 牛牛愛博弈
題意:有n顆石子,要求一次可以拿2^k個,拿到最後一顆的人獲勝
我們將2^k % 3, 發現答案是1, 2, 1, 2, 1, 2……
易得如果是3的時候,先手是必輸的,可以推出任何3的倍數都是必輸的.
#include
using
namespace std;
intmain()
}
d 牛妹愛數列
題意:你有乙個01串和兩種操作,
1.可以任意翻轉前n個數
2.單點翻轉乙個數
問最少操作多少次可以得到乙個0串
考慮dp
我們可以用dp1[i]代表將前i個數翻轉成1所需的最少次數,
用dp0[i]代表將前i個數翻轉成0所需要的最少次數
如果你想把前i個都變成0串,那麼會有兩種操作
1.將前i-1個數字都變成0, 再將i變成0
2.將前i-1個數字都變成1,再翻轉一次變成0
#include
using
namespace std;
const
int n =
1e5+10;
int a[n]
, dp1[n]
, dp0[n]
;int p[n]
;int
main()
dp0[1]
=(a[1]
==1);
dp1[1]
=1- dp0[1]
;for
(int i =
2; i <= n; i++
)printf
("%d\n"
, dp0[n]);
}
e 牛妹遊歷城市
題意:給n個城市,每個城市都有乙個權值,權值按位與之後不為0的點之間可以連一條權值為lowbit(a[i], a[j])的邊。
由於n的範圍為1e5,因此不能列舉所有點。
我們考慮將每個點都拆成32位,建立32個超級源點,將每個點向自己的超級源點連一條邊權為1<#include
using
namespace std;
typedef
long
long ll;
const
int inf =
1e16
;const
int n =
2e6+10;
int t, n, tot;
ll a[n]
, dis[n]
;int head[n]
, vis[n]
;inline
intlowbit
(int x)
struct edge e[n<<1]
;struct node };
priority_queue q;
void
add(
int u,
int v, ll w)
void
dij(
) dis[1]
=0; q.
push
(node);
while
(!q.
empty()
));}
}}intmain()
for(
int i =
1; i <= n +
40; i++
) dis[i]
= inf;
for(
int i =
0; i <
32; i++)}
}dij()
;if(dis[n]
== inf) cout <<
"impossible"
<< endl;
else cout <<
(dis[n]/2
)<< endl;
}}f 之後再補
牛客練習賽78 補題
b cca的搬運 注意陣列的頭和尾在實際模擬時的情形 include using namespace std const int maxn 1e5 5 int a maxn dp maxn n,m,x1,up maxn ans,sum,vis maxn d,b maxn k,t intmain fo...
牛客練習賽60補題
思路 考慮位運算 的特性 只有兩者都為1才會對答案有貢獻 且 對答案貢獻的值為 1 k 其中k是當前1所在二進位制下的位數 所以考慮預處理每乙個位的1出現的次數 其中對每一位都會遍歷n n次 所以每一位對答案的貢獻就是 a i a i 1 i a i 為當前位置1的個數 include using ...
牛客練習賽22題解
簡單瞎搞題 不會用bitset,所以沒做出來。實際上還是比較簡單的。include using namespace std bitset 1000005 dp 2 int main cout 2 count 簡單資料結構1 這裡要運用拓展尤拉定理。ab modp ab p b p p 0 modp ...