注意的點是任何時刻一張優惠券只能存在乙個,如果同一張優惠券還沒被使用又購入,就看上一次購入與該次購入之間有沒有問號可以替代使用,使用優惠券同理。
#include #include #include #include #include #include #include #include using namespace std;
int len;
int main()
else else
}last_in[x] = i;
} else if (line[0] == 'o') else else
}last_out[x] = i;
} else if (line == "?")
}cout << -1 << endl;
}return 0;
}
挺好的題。我的做法是建圖——將每個小區抽象為圖節點,小區i
有兩條出邊,出邊a
到達小區i+a[i]
,出邊b
到達小區i+b[i]
(如果到達的小區不存在就不用加邊)。問題即轉化為在乙個有向圖中,判斷節點0
與n-1
是否可達,如果可達,每次盡量走邊a
(這樣字典序才是最小的)。
#include #include #include #include #include #include #include #include #include using namespace std;
int n;
void solve(vector& a, vector& b, vector>& adj, vector>& prevs)}}
// go from s
int cur = s;
if (!can[cur])
vectorvis(n, false);
vis[cur] = true;
string res = "";
while (cur != t) else
if (to == t)
if (can[to])
vis[to] = true; // 一開始由於這句沒加上,導致爆空間,浪費了四次提交機會。。
res += select_;
cur = to;
break;}}
}}int main()
}for (int i = 0; i < n; ++i)
}solve(a, b, adj, prevs);
return 0;
}
#include #include #include #include #include #include #include #include #include using namespace std;
long long l, r;
long long compute_single(long long low, long long high, long long n)
} else
if (n / left == x) lb = left;
else if (n / right == x) lb = right;
// ub
left = low; right = high;
while (left + 1 < right)
if (n / right == x) ub = right;
else if (n / left == x) ub = left;
//cout << lb << " " << ub << " " << x << endl;
ret += (ub - lb + 1) * x;}}
return ret;
}void compute(long long n, vector& ans)
}}void solve()
}int main()
CodeM 2017美團點評程式設計大賽資格賽
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m 美團外賣的品牌代言人袋鼠先生最近正在進行 研究。他有兩段音訊,每段音訊是乙個表示音高的序列。現在袋鼠先生想要在第二段音訊中找出與第一段音訊最相近的部分。具體地說,就是在第二段音訊中找到乙個長度和第一段音訊相等且是連續的子...
美團 CodeM 資格賽 數碼 詳解
time limit 1 sec memory limit 256 mb description 給定兩個整數 l 和 r,對於任意 x,滿足l x r 把 x 的所有約數全部寫下來。對於每個寫下來的數,只保留最高位的那個數碼。求 1,9 中每個數碼出現的次數。輸入格式 輸入一行兩個整數 l 和 r...
美團codeM資格賽 優惠券
優惠券時間限制 1秒 空間限制 32768k 某次抽查時,發現有硬碟故障,歷史日誌中有部分行損壞,這些行的存在是已知的,但是行的內容讀不出來。假設損壞的行可以是任意的優惠券的購買或者使用。現在問這次抽查中業務是否正確。若有錯,輸出最早出現錯誤的那一行,即求出最大s,使得記錄1到s 1滿足要求 若沒有...