1. 程式人生 > >【Google Kickstart Round_H】解題報告

【Google Kickstart Round_H】解題報告

Problem A. Big Buttons

題意

一個長度為 nn 的 01串,該字串有 mm 個不能出現的字首,問這樣的字串有多少種?

題解

由於 n,mn,m 的範圍很小,直接建一棵表示字首限制條件的字典樹,然後在上面通過限制條件從可能方案中剪去即可。

程式碼

#include <bits/stdc++.h>
using namespace std;

const int maxn=int(1e5)+11;
int n,m,tot;
int to[maxn][2], mark[maxn];
char s[maxn];
long long ans=0;

int get_id(char ch) {return ch=='B';}
void ins(char *s,int len) {
	int cur=0;
	for(int i=1;i<=len;++i) {
		int ch=get_id(s[i]);
		if(!to[cur][ch]) to[cur][ch]=++tot;
		cur=to[cur][ch];
	}
	mark[cur]++;
	return;
}

void init() {
	tot=0;
	for(int i=0;i<maxn;++i) {
		to[i][0]=to[i][1]=0;
		mark[i]=0;
	}
	return;
}

void dfs(int k,int dep) {
	if(mark[k]) {
		ans-=(1ll<<dep);
		return;
	}
	if(to[k][0]) dfs(to[k][0],dep-1);
	if(to[k][1]) dfs(to[k][1],dep-1);
	return;
}

int cas=0;
void work() {
	init();
	scanf("%d%d",&n,&m);
	register int i;
	for(i=1;i<=m;++i) {
		scanf("%s",s+1);
		ins(s,strlen(s+1));
	}
	ans=(1ll<<n);
	dfs(0,n);
	printf("Case #%d: %lld\n",++cas,ans);

	return;
}

int main() {
#ifndef ONLINE_JUDGE
	freopen("input1.txt","r",stdin);
	freopen("output1.txt","w",stdout);
#endif
	int T;
	for(scanf("%d",&T);T;T--)
		work();

	return 0;
}

Problem B. Mural

題意

有一個由 0~9 的數字組成的數列,第一次可以隨便取一個數字,接下來的每一次只能取一個與已取區間相鄰的數字。且每次取出一個數字後,數列兩端的兩個數之一會隨機地變為不可取。問最壞情況下取出數字的最大和是多少。

題解

首先知道我們一定能取出一個長度為 (n+1)/2(n+1)/2 的連續區間;
而且,不管不可取的數字是如何出現在兩端的,對於一個長度為 (n+1)/2(n+1)/2 的區間,一定存在一種方法把它取到。
所以 O(n)O(n) 找出區間和最大的長度為 (n+1)/2(n+1)/2 的連續區間即可。

程式碼

#include <bits/stdc++.h>
using namespace std;

const int maxn=int(5e6)+11;
int n;
char s[maxn];
int sum[maxn];

int cas=0;
void work() {
	scanf("%d%s",&n,s+1);
	register int i;
	for(i=1;i<=n;++i)
		sum[i]=sum[i-1]+s[i]-'0';

	int ans=0, len=(n+1)/2;
	for(i=1;(i+len-1)<=n;++i)
		ans=max(ans,sum[i+len-1]-sum[i-1]);
	printf("Case #%d: %d\n",++cas,ans);

	return;
}

int main() {
#ifndef ONLINE_JUDGE
	freopen("input2.txt","r",stdin);
	freopen("output2.txt","w",stdout);
#endif
	int T;
	for(scanf("%d",&T);T;T--)
		work();

	return 0;
}

Problem C. Let Me Count The Ways

題意

nn 對情侶坐一起,其中的 mm 對情侶中的兩人不能坐相鄰位置,考慮情侶中的二人是不同的。問有多少種安排座位的方法?

題解

處理出 g(i)g(i) ,表示在那 mm 對不能坐一起的情侶中,至少有 ii 對情侶坐在一起的安排方案數。然後容斥一下出答案。
g(i)=Cmi(2ni)!2ians=i=0m(1)ig(i)g(i)=C_m^i*(2n-i)!*2^i \\ ans=\sum_{i=0}^{m} (-1)^i*g(i)

)ig(i)

程式碼

#include <bits/stdc++.h>
using namespace std;

const int moder=int(1e9)+7;
inline int add(int a,int b) {return (a+b<moder)?a+b:a+b-moder;}
inline int mul(int a,int b) {return 1ll*a*b%moder;}
inline int les(int a,int b) {return a>=b?a-b:(a+moder-b);}

const int maxn=int(3e5)+11;
int n,m;
int fact[maxn], inv[maxn];

int C(int m,int n) {
	return mul(fact[n],mul(inv[m],inv[n-m]));
}
int fpow(int a,int k) {
	int res=1;
	for(;k;k>>=1,a=mul(a,a)) if(k&1) res=mul(res,a);
	return res;
}
void init() {
	fact[0]=inv[0]=1;
	for(int i=1;i<maxn;++i) fact[i]=mul(fact[i-1],i), inv[i]=fpow(fact[i],moder-2);
	return;
}

int cas=0;
int g[maxn];
void work() {
	scanf("%d%d",&n,&m);
	for(int i=0;i<=m;++i)
		g[i]=mul(C(i,m),mul(fact[2*n-i],fpow(2,i)));
	int ans=0;
	for(int i=0;i<=m;++i) {
		if(i&1) ans=les(ans,g[i]);
		else ans=add(ans,g[i]);
	}
	printf("Case #%d: %d\n",++cas,ans);
	return;
}

int main() {
#ifndef ONLINE_JUDGE
	freopen("input1.txt","r",stdin);
	freopen("output1.txt","w",stdout);
#endif
	init();
	int T;
	for(scanf("%d",&T);T;T--)
		work();

	return 0;
}

相關推薦

Google Kickstart Round_H解題報告

序 Problem A. Big Buttons 題意 一個長度為 nnn 的 01串,該字串有 mmm 個不能出現的字首,問這樣的字串有多少種? 題解 由於 n,mn,mn,m 的範圍很小,直接建

2018.3.28 AtCoder beginner092-C 解題報告(線性處理)

C - Traveling PlanTime limit : 2sec / Memory limit : 256MBScore : 300 pointsProblem StatementThere are N sightseeing spots on the x-axis,

洛谷 T28312 相對分子質量2018 6月月賽 T2 解題報告

字符 pac ... 給定 substr ++ 錯誤 如果 題目 T28312 「化學」相對分子質量 題目描述 做化學題時,小\(F\)總是裏算錯相對分子質量,這讓他非常苦惱。 小\(F\)找到了你,請你來幫他算一算給定物質的相對分子質量。 如果你沒有學過相關內容也沒有關系

USACO1.4解題報告

前言 本章主要考的是貪心和一些比較麻煩的模擬。難度相比上一章有很明顯的提升。但是稍微想一下還是可以想出來的(第五題除外,看了一下題解的思路)。 USACO:http://train.usaco.org 1.4.2.Mixing Milk 思路: 很明顯是一道貪心基礎

USACO1.3解題報告

前言 這一章主要考察的是一些簡單的數論和思維轉化能力。還是相對來說比較簡單的。 USACO:http://train.usaco.org 1.3.2.Milking Cows 思路: 字首和基礎題。 每次讀到有人在

USACO1.2解題報告

前言 以後將會不定期刷USACO的題目。每做完一小章會寫一份解題報告。這一小章裡面較簡單或者並不是很重要的題目就會直接放在裡面。而比較重要的題目就會單獨寫部落格,在這裡面放連結。 這一章很簡單,全部都是很基礎的題目。就直接在這裡面一筆帶過。 USACO:http://train.us

USACO1.5解題報告

前言 這章只有兩道題,但是質量都不比上一章低。 第一題正解肯定很難,但是資料神奇般的把 O (

USACO1.6解題報告

前言: 這章的三道題目中有兩道是可以用 D F S

USACO2.1解題報告

前言 USACO2.1主要內容是圖論。其中有幾道題是要用深搜做的。而另外幾道題則是利用模擬的方法來完成簡單圖論。 總體來說難度還是比較小的,算是最基礎的演算法吧。 UASCO:http://train.usaco.org 2.1.3.The Castle 題解

USACO2.2解題報告

前言 然而只有一道動態規劃的題目。。。 其他三道題都是模擬。。。 難度還是有所增加的。至少在洛谷中又有一道藍題了。 USACO:http://train.usaco.org USACO2.2.3.Preface Numbering 思路: 我們會發現羅馬數字中每一位都

USACO2.3解題報告

前言 本章主要是動態規劃,但是其中幾道題的方法比較多,我採用了其他的方法。 題目已經開始變難,有幾道題還特別值得思考。已經達到普及 T 3

校內賽 codeforces 827D最小生成樹樹鏈剖分 解題報告

找不到題面!! 題意 給出一張n(<=2e5)個點 m(<=2e5)條邊無向圖,保證有生成樹。對於每條邊,給出一個最大值maxLength,咦即能夠保證這條邊能夠出現在所有的最小生成樹中,邊權的最大值為maxLength(同時,其他所有邊長度不變

leetcode 5040. 邊框著色解題報告

posit 整數 d+ perf src check 網格 orm poi 給出一個二維整數網格 grid,網格中的每個值表示該位置處的網格塊的顏色。 只有當兩個網格塊的顏色相同,而且在四個方向中任意一個方向上相鄰時,它們屬於同一連通分量。 連通分量的邊界是指連通分量中

leetcode 94. 二叉樹的中序遍歷解題報告

stack traversal roo tree order targe blank span etc 前往二叉樹的:前序,中序,後序 遍歷算法 方法一:遞歸 vector<int> res; vector<int>

leetcode 145. 二叉樹的後序遍歷解題報告

中序 stack mage blank res tor tac 前序 top 前往二叉樹的:前序,中序,後序 遍歷算法 方法一:遞歸 vector<int> res; vector<int> postorderTrave

leetcode 968. 監控二叉樹解題報告[待完善...]

由於 camera 需要 spa alt img 狀態 數量 turn 方法一:遞歸 // 0:該節點安裝了監視器 1:該節點可觀,但沒有安裝監視器 2:該節點不可觀 int monitor = 0; int state(TreeNod

leetcode 106. 從中序與後序遍歷序列構造二叉樹解題報告

++ amp src 圖片 ima 遍歷序列 tree cto 建立 前往 中序,後序遍歷構造二叉樹, 中序,前序遍歷構造二叉樹 TreeNode* build(vector<int>& inorder, int l1, int r1,

leetcode 105. 從前序與中序遍歷序列構造二叉樹解題報告

nullptr treenode ref != 圖片 lan size htm amp 前往 中序,後序遍歷構造二叉樹, 中序,前序遍歷構造二叉樹 TreeNode* build(vector<int>& preorder, int l

leetcode 239. 滑動窗口最大值解題報告

urn int 分享 empty 頭部 pty size 圖片 leet 思路:滑動窗口的思想,只要是求連續子序列或者子串問題,都可用滑動窗口的思想 方法一: vector<int> maxSlidingWindow(vector<in

Google設計衝刺一種適合於創新小組的協作方式

傳統的產品閉環是1.產品策劃-2.研發-3.上線-4.等待市場反饋,4個步驟。對於一個創新專案來說,試錯成本過高,等待週期過長【註釋1】。那麼,有沒有一種適合創新專案的協作方式呢?谷歌風投傑克·納普發明了一種新型的產品設計方法,從1.產品策劃到4.市場反饋,直接形成閉環,即“Google設計衝刺”。 關鍵點