02 2018 档案
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 这个x2,y2和圆心(x1,y1)相连。形成的直线和圆交于点(x3,y3) 则(x2,y2)和(x3,y3)的中点就是所求圆的圆心。 半径就是x2,y2到x3,y3的距离的一半。 写个向量的方法,求出x3,y3的坐标就好了。 【
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 会发现,如果把连续4个数字进行一次翻转的话。 假设这连续的4个数字的逆序数为x; 那么翻转过后,逆序数就会变成6 x; (最多6个逆序数,现在翻转了 那么这4个逆序数的变化为6 2x 显然变化值为一个偶数。 而1..l 1和r+
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 添加两个y坐标0和h 然后从这n+2个y坐标中任选两个坐标,作为矩形的上下界。 然后看看哪些点在这个上下界中。 定义为坐标集合S S中的点的相邻x坐标差和上下界的差的较小值是这个矩形能够构成的最大正方形。 枚举所有情况就好。 【
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 用单调队列求出l[i]和r[i] 分别表示i的左边最近的大于a[i]的数的位置以及i右边最近的大于a[i]的数的位置。 则l[i]+1..r[i] 1就是a[i]这个数作为最小数的最大管辖区间了。 写个前缀和就好。 然后取a[i
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 尺取法。 考虑一个1..i的窗口。 里面在到达了i位置的时候恰好有1..k这些数字了。 为了更接近答案。 显然可以试着让左端点变成2.(如果还能有1..k这些数字的话。 所以有1..k这些数字之后。就让左端点尽可能往右。 然后尝
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 枚举N[q]和N[r]的位置 因为N[q]是最大值,且N[r]是最小值。 且它们是中间的两个。 枚举这两个可以做到不重复枚举。 然后假设我们枚举了q和r的位置分别为i和j (a[i] a[j] 那么我们接下来需要得到两个东西。
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 让你在树上找一个序列。 这个序列中a[1]=R 然后a[2],a[3]..a[d]它们满足a[2]是a[1]的祖先,a[3]是a[2]的祖先。。。 且w[a[1]] 【题解】 考虑一个naive的思路。 定义一个next[i]数组,表示i往上最近的权值大
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 p[i] = p[p[i]]一直进行下去 在1..n的排列下肯定会回到原位置的。 即最后会形成若干个环。 g[i]显然等于那个环的大小。 即让你形成若干个环。 每个环的大小只能为A或B 则相当于问A x+B y=n是否有解。 可
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 写个记忆化搜索。 接近O(n)的复杂度吧 【代码】 cpp include using namespace std; const int N = 1e6; int g[N+10]; int pre[N+10][20]; int
阅读全文
【ICM Technex 2018 and Codeforces Round #463 (Div. 1 + Div. 2, combined) A】 Palindromic Supersequence
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 字符串倒着加到原串右边就好 【代码】 cpp include using namespace std; int main(){ ifdef LOCAL_DEFINE freopen("rush_in.txt", "r", std
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 ans初值值为a[1..n]中1的个数。 接下来考虑以2为结尾的最长上升子序列的个数。 枚举中间点i. 计算1..i 1中1的个数cnt1。 计算i..n中2的个数cnt2。 ans = max(ans,cnt1+cnt2) 写
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 DP,设f[i]表示第一次到i这个房间的时候传送的次数。 f[1] = 0,f[2] = 2 考虑第i个位置的情况。 它肯定是从i 1这个位置走过来的。 但是第一次走到i 1这个位置的时候。 需要再走回p[i 1],然后回到i
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 最后的直角三角形可以通过平移,将直角顶点移动到坐标原点。 然后我们只要枚举另外两个点其中一个点的坐标就好了。 x坐标的范围是[1..a) 因为再长的话,这条边肯定就超过边长a了。 然后用一些相似三角形的规律就能知道另外一个点的坐
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 a1+a2+...+aka1a2=0 且a[j] =0 那么按a[i]+1,a[i]+2..顺序递增代替问号就好 a[i]0的话,就从0的两边交替选数字就好,取出0两边交替的数字的最小值,
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 KMP算法可以把"i前缀"pre[i] 分成ssssst的形式 这里t是s的前缀。 然后s其实就是pre[i]中的前 i+1 f[i]个字符组成的 字符串。 特殊的,t可能就是一个空串。 比如abcdefg 这里f是kmp算法中
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 感觉很像一道最短路。 然后就试了一发。 结果真的是。。 只要用一个优先队列优化的dijkstra算法求出每个点的最短路上的前一个点是什么就可以了。 相同大小的话.取每个边的前一个边的边权较小的那个。 然后把每个点的前缀边输出就好
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 考虑,为什么一个连通块里面的空格没有变成一个矩形? 如果不是形成矩形的话。 肯定是因为某个2x2的单张方形里面。 只有一个角是墙。其他角都是空的正方形。 举一些例子。 可以看到这个连通块不是长方形。 就是因为有 和 如果我们把这
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 如果我们对某一个位置i操作两次的话。 显然结果就和操作一次一样。 因为第一次操作过后1..i这些数字就变成是互质的了。 gcd为1.那么除过之后没有影响的。 然后。就是要明白 那个f(x)函数的意义。其实就是问你x质因数分解之后
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 那个D函数它的下降速度是很快的。 也就是说到最后他会很快的变成2或者1 而D(2)==2,D(1)=1 也就是说,几次操作过后很多数字实际上就不会发生变化了。 我们可以以这个为切入点。 可以用树状数组写,也可以用线段树写。 如果
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 bfs. 用一个链表来记录哪些点已经确定在某一个联通快里了。 一开始每个点都能用。 然后从第一个点开始进行bfs. 然后对于它的所有连接着的点(输入的图的补图 看看它是不是之前进行过bfs,如果是的话。就跳过。(可以用链表直接跳
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 显然l..r这一段连续的1可以把l..r+1变成有序的。 那么就把所有的连续1段变成有序的就好。 看看最后是不是升序即可。 【代码】 cpp include using namespace std; const int N =
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 用一个队列来模拟排队就好。 队列放三元组(x,y,z) x表示人的下标,y和z分别表示进入和退出时间。 然后枚举时间从1到5000 看看有没有人在这个时刻入队。 有的话就入队。 入完之后。 再处理在队头的人。 如果已经超过了最晚
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 记录下水龙头在哪些位置。 然后每秒钟把index i和index+i改变状态一下就好(置1 【代码】 cpp include using namespace std; const int N = 200; int n,k; in
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 所给的li,ri是左括号从左到右的顺序给的。 (且注意长度是2 n 现在我们先把第一个左括号放在第1个位置。 然后考虑第二个位置。 如果这个位置能放右括号和第一个匹配(位置满足在1+l[i]..1+r[i]之间. 那么我们就在第
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 找规律。 1,13,37.... 6 n (n 1) + 1 【代码】 cpp include define ll long long using namespace std; ll n; int main(){ ios::sy
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 一开始所有的数字单独成一个集合。 然后用v[0]和v[1]记录 集合的和 为 偶数 和 奇数 的集合 它们的根节点 (并查集 然后先让v[0]的大小变成p //奇数+偶数是奇数 //奇数+奇数是偶数 //偶数+偶数是偶数 如果v
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 处理处所有的字符串可能的样子。 存在map里面就好。 【代码】 cpp include using namespace std; const string S[8] = {"vaporeon", "Jolteon", "Flar
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 根据时间和原分数。 算出对应的分数就可以了。 【代码】 cpp include using namespace std; int a,b,c,d; int main() { cin a b c d; int temp1 = ma
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 看看有没有(n 2) 180/n等于输入的a就好。 【代码】 cpp include using namespace std; int main() { int T; cin T; while (T ){ int a; cin
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 这一题和这一题很像 ( "链接" ) 会发现如果a[i]!=b[i]那么就按下i就好了。 然后改变和他相邻的点。 此后a[i]再也不可能和b[i]相同了。 (其他点无论怎么按b[i]只会变大) 但是这样直接暴力写会超时 O(N^
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 紫书上的原题; "链接" 【代码】 cpp include define ll long long using namespace std; const int N = 1e5; ll m,c1,c2,v1,v2; int ma
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 考虑l..r这个区间。 且r是满足a[r] a[l]r的话累加C(R (l+1)+1,3); 如果l+1 【代码】 cpp include define ll long long using namespace std; con
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 优先把不是10的倍数的变成10的倍数。 (优先%10比较大的数字增加 如果k还有剩余。 剩下的数字都是10的倍数了。 那么先加哪一个都可以了。 【代码】 cpp include using namespace std; cons
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 从右往左维护最大值。 看到比最大值小(或等于)的话。就递增到比最大值大1就好。 【代码】 cpp include using namespace std; const int N = 1e5; int a[N+10],n; in
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 模拟题。 两个一起用 min(a,b); 剩下的除2加上去就好 【代码】 cpp include using namespace std; int a,b; int main() { cin a b; cout
阅读全文
摘要:【链接】 我是链接,点我呀:) 【题意】 在这里输入题意 【题解】 如果有环 ->直接输出-1 (拓扑排序如果存在某个点没有入过队列,说明有环->即入队的节点个数不等于n 否则。 说明可以做拓扑排序。 →是一个有向无环图。 那么定义f[x][y] 表示x节点前面的某条路径中,字母y出现的最多次数是多
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 用pre[i][j]表示第i行前j列的和。 然后枚举连续座位的最左上点。 (有两种可能向右或向下k个。 则还需要处理出pre2[i][j]表示第j列前i行的和。 (都可以O(N^2)求出 然后pre[i][j+k 1] pre[
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 直接暴力求出第k个perfect数字就好。 纯模拟。 【代码】 cpp include define double long double using namespace std; int n; int _judge(int x
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 就是让你求m (ai/bb)的最小值 【代码】 cpp include define double long double using namespace std; int n,m; int main(){ ifdef LOCA
阅读全文