随笔分类 - atc
摘要:C **题意:**有从0开始编号的村子0, 1, 2, 3, ..., 一开始taro在0号,有k元,每去一个村子需要花费1元,taro有N个朋友,分别站在N个村子,当taro到第i个朋友站的村子的时候,第i个朋友会给他ki元,问taro能走到的最大编号是多少 **方法:**模拟或者二分(一开始想复
阅读全文
摘要:C **题意:**给你a, b, c, 判断$ac$ 和 $bc$谁大$−109≤A,B≤109,1≤C≤10^9$ **方法:**如果c为奇数直接判断ab大小,否则判断绝对值的大小 #include<iostream> #include<vector> #include<cstring> usin
阅读全文
摘要:C **题意:**给你一个串S,从里面选8个字符,问有多少种选法,使得从左到右读起来是chokudai **方法:**dp 状态:$f(i, j)$表示在S的前i个字符中选j个字符,和chokudai的前j个字符一样的选法总数 状态计算: \[ f(i, j)= \begin{cases} 0 &
阅读全文
摘要:A **题意:**给你一个长度为3的只包含小写字母的串,问有多少种不同的排列 **方法:**根据相同字符的个数,输出答案 #include<iostream> #include<string> #include<algorithm> using namespace std; int main(){
阅读全文
摘要:B **题意:**有1!, 2!, ..., 10!面值的硬币每个100个,问需要凑成P的最少的硬币数 **方法:**贪心 #include<iostream> #include<algorithm> #include<vector> #include<cstring> using namespac
阅读全文
摘要:B **题意:**一个容器,一开始有A个青球,现在你可以进行一种操作:向容器里面放B个青球和C个红球,问是否能够通过t次操作使得青球的个数少于红球个数的D倍 方法: n次操作后,箱子里有$A + nB$个青,$nC$个红球,要求$(A + nB)/(nC) \le D \rightarrow A +
阅读全文
摘要:C **题意:**给你一堆不同的点,从中选三个点,能够获得的三角形个数有多少 **方法:**选三个点,判断是否三点共线,或者用海伦公式判断面积是否为0 #include<iostream> #include<string> #include<vector> using namespace std;
阅读全文
摘要:C **题意:**给你一个网格,宽为W,高为H,然后输入N个坐标,对于$i = 1, 2,...,N$,第i个坐标处填i,重复下面两种操作: 删除空行 删除空列 问最终每一个数字的位置在哪 方法: 排序去重+二分,由于$1≤H,W≤10^9$,所以不能模拟来做,对于每一个数字只需要关心这个数字上面有
阅读全文
摘要:C **题意:**N个人按顺序(1~N)站成一圈,每一个人都有一个时间s表示他拿到球以后会在多久之后给下面一个人,另外给你一个序列T,ti表示takahashi会在ti绝对时间给第i个人一个球,问你每一个人第一次获得球的时间 **方法:**因为每个人的首次获得球的时间一定是由前面一个人第一次给他球的
阅读全文
摘要:C **题意:**给你一个字符串,求字典序第k小的排列 #include<iostream> #include<string> #include<algorithm> using namespace std; string s; int k; signed main(){ cin >> s >> k
阅读全文
摘要:C **题意:**给你一个数字N,一开始a = 0,看能不能通过+1(A)和*2(B)的操作使a = N,并且要求操作次数 ⇐120 #include<iostream> #include<string> using namespace std; #define int long long int
阅读全文
摘要:B **题意:**给你一个长为N的串(只包括小写字母),可以对他循环左移或右移,求能够获得的最小/大字典序串 **方法:**左移一次相当于右移N - 1次,左移两次相当于右移N - 2次...所以只需要模拟左移0~N - 1次,就包括了右移的所有情况... #include<iostream> #i
阅读全文
摘要:C **题意:**给你两个网格s, t,里面都包含.和#,并且#会构成形状,问你能不能通过旋转90和平移操作使得两个网格里面#构成的形状相同 **方法:**模拟 #include<iostream> #include<vector> #include<cstring> using namespace
阅读全文
摘要:C **题意:**给你一个长为N的序列A,并由他构成一个无限长的序列AAAAA....(至少对于输入数据是这样的),问你在这个无限长的序列中,前多少个数字的和会超过X #include <iostream> using namespace std; const int N = 100010; #de
阅读全文
摘要:C **题意:**给你一个整数N,设N的长度为t,t个数字里选p个数字作为a,剩下t - p个数字作为b,要求a和b均大于0,且a和b不存在前导0,问能够获得的最大的a*b是多少 **方法:**全排列+暴力 #include<iostream> #include<string> using name
阅读全文
摘要:C #include<iostream> #include<vector> #include<algorithm> using namespace std; const int N = 120, M = 110; int n, m; struct node{ int id, val; string
阅读全文
摘要:传送门 C - Bowls and Dishes 暴搜,二进制枚举,复杂度$O(2^km)$ #include<iostream> #include<cstring> using namespace std; const int N = 110, M = 16; int a[N], b[N], c[
阅读全文
摘要:只看懂前两题。。。 B题:前缀和 // A T G C // A <=> T // C <=> G #include<iostream> using namespace std; const int N = 5010; int a[N], g[N], t[N], c[N]; int n; char
阅读全文
摘要:A - Reachable Towns 参考了题解:单调栈+并查集 这题一开始用的是O(n^2)枚举+并查集,T掉了 做法: 对原序列的第一维坐标升序排序,维护一个以第二维坐标为参照的单调不增的单调栈,栈中存放(pos, y)二元组,这个表示城市pos所在的集合中最小的y坐标。 #include<i
阅读全文

浙公网安备 33010602011771号