
思维
Luowaterbi
Lazy, Stupid Trash
展开
-
PAT甲级1010Radix
题意:给两个数字并给出一个的进制,问另一个数能不能在某个进制之下等于前一个个数。题解:肯定是把有进制的转换成十进制,然后另一个数对每个进制转换成十进制去跟第一个数比较虽然题目上只有0~10,a~z,但不代表进制只到36,进制可能非常大,需要二分二分的初始左边界好求,右边界可以设置为max(左边界,十进制下的另一个数)在二分的过程中,进制过大可能暴longlong,得到负数的时候说明这个时候的进制太大其实我觉得这个题的问题很大,题目上没说,但几乎默认了有进制的数转换成十进制不会暴ll。我也是原创 2021-02-26 20:03:05 · 242 阅读 · 0 评论 -
CF1492E - Almost Fault-Tolerant Database
1492E - Almost Fault-Tolerant Database题意:给n个数列,每个数列有m个数,请找出一个数列,使得该数列与每个数列不同项只有2个。题解:可以把第一个数列当作初始数列,看看能不能改动不多于2个的情况下,使之成为满足要求的答案。先遍历,不同项不超过2个的都无所谓。如果存在不同项超过4个的,那怎么改也不会存在答案。那么就考虑不同项有3个或者4个的。如果存在4个不同项的序列,那就好写了。反正这4个项一定要有2个改成对方的数,C42C_4^2C42种情况,每个试一下,注原创 2021-02-24 23:20:06 · 289 阅读 · 0 评论 -
CF1492D - Genius’s Gambit
1492D - Genius’s Gambit题意:给a个0,b个1,请你构造两个二进制数x,y,使得x-y有k个1。x,y必须有先导1。题解:显然,在至少有2个1的时候,有多少个0,x-y就可以有多少个1.110000-100001=001111然后我就愉快的WA了一发。再有多个1的时候,还可以增加1.1110000-1010001=0011111111110000-101110001=001111111所以前面有多少个1(除了第一个1),就可以再增加多少个1.所以减去末尾的1和开头原创 2021-02-24 22:59:08 · 222 阅读 · 0 评论 -
CF1492C - Maximum width
1492C - Maximum width题意:给两个字符串s,t,从s中构造子序列=t。定义一个子序列的值为序列中所有相邻两个字母在s中下标之差的最大值。求所有子序列的最大值。题解:先算出最靠前的子序列,在求出最靠后的子序列。再用i+1的靠后子序列中的下标减去i的靠前的。这样相当于说这个子序列是有i的靠前的子序列和i+1的靠后的子序列组成的t,这样的差一定是最大的。注意是子序列,下标要有序。我一开始没看到有序。。。AC代码:#include <cstdio>#include &原创 2021-02-24 22:44:14 · 220 阅读 · 0 评论 -
CF1492B - Card Deck
1492B - Card Deck题意:给一个permutation A,你可以取A的任意后几位不改变顺序放到B的开头,直到A被取完。B的值计算方式为∑i=1nnn−i×Bi\sum^{n}_{i=1}n^{n-i}\times B_ii=1∑nnn−i×Bi请输出值最大的B。题解:一看到前缀是nn−in^{n-i}nn−i显然直接贪心,前面越大越好。因为对于一个数往前移动是*n,往后走是/n,那么大的数往前走,把比它小的数往后挤是更优的。AC代码:#include <cstd原创 2021-02-24 22:35:49 · 432 阅读 · 0 评论 -
CF1492A - Three swimmers
1492A - Three swimmers题意:三个人在游泳,分别以每a,b,c分钟游一圈。你在p分钟后到泳池,问最短需要等待多长时间可以看到任意一个人。题解:p如果是a或者b或者c的倍数,显然等待时间为0,否则为a−pa-p%aa−p,b,c同理,取个min就行。AC代码:#include <cstdio>#include <iostream>#include <vector>#include <string>#include <原创 2021-02-24 22:23:03 · 479 阅读 · 0 评论 -
CF1474D - Cleaning
一开始把这个题想复杂了。从前往后做一下差分p,从后往前做一下差分s。如果前一次不合法,将这一次也标记上。交换相邻的a[i],a[i+1],只影响p[i-1],a[i],a[i+1],s[i+2]。判断p[i-1],a[i+1],a[i],s[i+2]能否满足情况。不知道std为什么写得那么丑。。。#include <bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define lep(i,.原创 2021-01-20 22:18:17 · 304 阅读 · 0 评论 -
CF1474C - Array Destruction
x是递减的。假设当前数组剩下最大的是a,那么数组一定要有一个数b+a=x,使得a被使用掉。因为如果a不被使用掉,x将变成一个比a小的数,那么a将永远无法使用。用桶维护一下每个数字出现的次数就行。注意桶的清空和赋值,我这个地方调了好久。AC代码#include <bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define lep(i,a,b) for(int i=(a);i>=(b);i-原创 2021-01-20 22:11:24 · 218 阅读 · 0 评论 -
CF1474B - Different Divisors
题意:给出d,要求输出一个数x,x最少有4个因子,且x的任意两个因子之差必须大于等于d。题解:手玩一下,x肯定是2个质数之积。第一个因子a是>=1+x的最小质数,第二个因子b是>=1+a的最小质数。AC代码:#include <bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define lep(i,a,b) for(int i=(a);i>=(b);i--) #define原创 2021-01-20 22:07:03 · 457 阅读 · 1 评论 -
CF1474A Puzzle From the Future
题意:将两个2进制数a,b可以对位相加成一个三进制数c,三进制数如果有连续的相同的数会缩成一个,比如“0000222221111020101”→“021020101”。给b,请输出能使c最大的a。题解:从c的角度出发。a的第i位只跟c的i-1位和b的i位有关。AC代码:#include <bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define lep(i,a,b) for(int i=(a原创 2021-01-20 22:03:32 · 235 阅读 · 1 评论 -
CF1467E. Distinctive Roots in a Tree
题意:一棵有点权的无根树,定义特殊点:该点到树上任意一点路径上的点权不重复。问特殊点的数量。题解:因为树上两点路径的唯一性,对于两个点权相同的点u1,u2u_1,u_2u1,u2,显然只有这两点之间的点可以作为特殊点。因为两端的点,比如在u1u_1u1一端的点,它到u2u2u2的路径必然经过u1u1u1,就会导致点权重复。任取一个作为根节点。定义特殊值:只有特殊点的特殊值为0。我们考虑当前节点uuu。树会被分成三个部分,点集A={x∣dfn[x]<dfn[u]}A=\{x|dfn[x]&原创 2021-01-15 14:25:18 · 199 阅读 · 0 评论 -
2020牛客多校(第七场)D-Fake News
题意:判断1到n的平方和是否为平方数。题解:因为是大数,一开始用python冲,发现连输入1e6就直接T了。根据平方和公式,感觉很难拆成两个相等的数,因为n与n+1是互质的,打表直接冲,发现1e7之内只有1和24,猜一下只有1和24满足,冲,过了。AC代码:#include <iostream>using namespace std;typedef long long ll; int main () { int T; scanf("%d", &原创 2020-08-01 16:45:12 · 337 阅读 · 0 评论 -
CodeForces1388B - Captain Flint and a Long Voyage
题意将一个nnn位十进制的数,转换成2进制,然后删除2进制的最后nnn位,问剩下的二进制最大的时候,十进制数最小为多少。题解写一下0~9的2进制代码,发现只有8,9是4位。同样进制下比较数的大小,最先比的就是位数,那么2进制数的数位应该尽量多,这样删去后n位剩下的位数也是最多的。那么这个十进制数肯定每一位上只有9,8,可以确定剩下2进制数的位数。9是(1001)2(1001)_2(1001)2,8是(1000)2(1000)_2(1000)2,同等位数下比较肯定9是更优的。因此我们删去nnn位后剩原创 2020-07-31 11:03:44 · 537 阅读 · 0 评论 -
CodeForces1388A - Captain Flint and Crew Recruitment
题意对于一个数xxx,如果它可以表示成x=p×qx=p\times qx=p×q,称之为近似质数,其中1<p<q1<p<q1<p<q,且p,qp,qp,q都为质数。现在给你一个n,请问是否能将这个n分成4个不同的正整数,其中至少3个为近似质数。题解至少三个近似质数,那我们就先算出来最小的三个近似质数,分别为6=2×3,10=2×5,14=2×76=2\times 3,10=2\times 5,14=2\times 76=2×3,10=2×5,14=2×7,只要n&g原创 2020-07-31 10:50:23 · 466 阅读 · 0 评论 -
HDU 6556 The World
题意:已知四个城市的时区,给你一个城市的时间,转换成另一个城市的时间。坑点:12:00 AM是晚上0点,12:00 PM是中午12点题解:所有时间转换题全都用24小时制!!!方便快捷,一开始用的12小时制算的头晕,特殊情况太多,换成24小时制直接把这题秒了。分钟是不会动的,我们只考虑小时。当前是 12:00 AM,转换成24小时制应该是0点。当前是 12:00 PM,转换成24小时应该不变。当前是 PM 且不是 12 点,则 小时+12 为24小时制。24小时制小时只能为0~23,不要出现2原创 2020-05-24 22:59:25 · 315 阅读 · 0 评论 -
CodeForces1345B. Ternary String
给一个只含有‘1’,‘2’,‘3’的字符串,找到同时含有‘1’,‘2’,‘3’的一个长度最小的子串。设置一个数组a[4][N]a[4][N]a[4][N],a[j][i]a[j][i]a[j][i]表示字符串第iii位的字符,前面离它最近的字符‘j’的下标。以a[2][10]a[2][10]a[2][10]为例,就是在字符串第10位之前,最靠近第10位的字符‘2’的下标。a[s[i]−′0′][i]=ia[s[i]-'0'][i]=ia[s[i]−′0′][i]=i距离当前位最近的s[i]−′0′s[i原创 2020-05-19 17:35:24 · 333 阅读 · 0 评论 -
CodeForces1345A. Alarm Clock
Polycarp需要睡aaa分钟,bbb分钟后他的闹钟第一次响,闹钟每一次响如果他还没睡够会让闹钟ccc分钟后再响,被闹钟吵醒之后他需要ddd分钟才能睡着,问多久他才能睡够。注意,即使睡够了,也只有闹钟响的时候Polycarp才会起床。显然,a≤ba\leq ba≤b时直接输出bbb即可;若a>ba>ba>b并且c≤dc\leq dc≤d时,Polycarp永远睡不够;剩余的情况就是Polycarp在bbb分钟之后还需要睡(a−b)(a-b)(a−b)分钟,每ccc分钟可以睡 分钟原创 2020-05-19 17:14:18 · 274 阅读 · 0 评论 -
Codeforces 1303D Fill The Bag
给你一个数n,再给你m个数,这m个数都是2的幂次,可以将2的幂次向下拆成两个相等的数(降一次幂),问最少拆多少次,使得能直接组成n。首先把m个数加起来,判断与n的大小,如果比n小,一定组成不了,否则一定可以组成n之后把n拆成二进制,用bit[]表示,再统计m个数中每一个幂次出现的次数,用cnt[i]表示2的i次出现的次数。从低位向高位用cnt-bit,当cnt[i]<bit[i]...原创 2020-02-13 17:23:46 · 207 阅读 · 0 评论 -
Codeforces 1303C Perfect Keyboard
给你一个字符串,要求你设计一种键盘,这个键盘用一行表示,其中在题目字符串中相邻的字符,在你的键盘上也要相邻。我们用三个数组模拟一个双向链表,pre[i]表示i字符前一个字符,nxt[i]表示i字符后一个字符,vis[i]标记i字符是否在链表中出现。输出的时候我们先把链表输出,再把剩余的随便输出就i行。一个字符在链表出现过后,它的位置就是固定了的,如果前后为空可以添加,但不能使它调到别的...原创 2020-02-13 17:12:06 · 260 阅读 · 0 评论 -
Codeforces 1303 B National Project
你要修一条长度为n的路,g天连续的好天气和b天连续的坏天气轮流出现,好天气修的是好路,坏天气修的是坏路,可以在某一天不工作,既不修路,问将路修完并且好路占绝对一半(奇数是/2+1)所需的天数。我们把(g+b)当作一个循环。如果g>=b,我们可以一直修路,因为一个循环内任意时间好路的长度都>=坏路的长度,一直修即可,直接输出n。如果g<b,我们就需要考虑在坏天气的时候不...原创 2020-02-13 16:52:16 · 349 阅读 · 0 评论 -
Codeforces 1303A Erasing Zeroes
给一个01串,让所有的1连在一起。一开始理解成了不能有单独的1,以为00110001100这样只要没有单独的1就行,后来才发现是所有1必须连在一起。找到最靠前和最靠后的1,统计中间0出现的字数,它们都要被删去。#include <bits/stdc++.h>using namespace std;string s;int main(){ int t; ...原创 2020-02-13 16:10:43 · 210 阅读 · 0 评论 -
BZOJ1951 Sdoi2010 古代猪文
卢卡斯定理例题。#include <cstdio>#include <algorithm>using namespace std;typedef long long ll;const ll p=999911659;const int N=1e5+5;void exgcd(ll a,ll b,ll &x,ll &y){ if(!b...原创 2020-02-05 23:46:48 · 185 阅读 · 0 评论 -
Codeforce 1296 F Berland Beauty
给一颗无根树,你要给每条边赋边权,满足每对到的路径上最小边权为。树上任意两点之间的路径可以知道的,我们把所有w按从大到小排序,然后把a到b的路径上的边没有赋边权的全设为w,已经有边权的不变,同时计算这条路径上最小边权minn,如果最后minn=w,证明赋权成功,否则失败。w一定要从大到小,这样才能保证后来的不会覆盖先前的。如果把覆盖成了,那么之前到的路径上最小边权就...原创 2020-02-05 16:26:05 · 563 阅读 · 0 评论 -
Codeforce 1296 E String Coloring
给一个字符串,给字符串所有字符染色,相邻两个颜色不同的字符可以交换,问至少需要多少种颜色,可以使得经过任意次数交换之后字符串满足字典序。要想一个字符一直交换到它的字典序位置,也就是说他前面字典序比它大的都要跟它颜色不同,这样这个字符才能到所有字典序比它大的字符前面。用表示染第j种颜色字典序最大的字符是多少。到字符时,从1开始给它染色,如果表示的最大字符小于等于,意味着不用与前面...原创 2020-02-05 16:14:57 · 457 阅读 · 0 评论 -
Codeforce 1296 D. Fight with Monsters
有n个怪兽以及他们的血量,A和B两个人要杀死所有怪兽,他们的攻击力分别为a和b。对于每一个怪兽,A,B轮流攻击,A总是先手,如果在A攻击的过程中怪兽死亡,A得1分;在B攻击的过程中怪兽死亡,A不得分。A可以跳过B攻击的回合k次,就是这k次B不对怪兽进行攻击,问A最多能得多少分。先对取模,这些血量让A,B轮流攻击,只有最后一回合才影响得分。用表示对于第i个怪兽,需要跳过多少B的回合A才...原创 2020-02-05 16:00:35 · 386 阅读 · 0 评论 -
Codeforce 1296 C. Yet Another Walking Robot
给你一个字符串,代表机器人的行动方向,请你删除这个字符串的一个子串,使机器人终点并不改变,有多个子串满足条件时,输出最短的那个。就是找字符串中机器人轨迹最短的重复。设置从开始,记录每一步的坐标以及第几步step扔进一个结构体,排序后统计。如果是同一位置就是相同,比较它们step差多少,就是删去子串的长度,更新答案即可。#include <cstdio>#include ...原创 2020-02-05 15:48:42 · 262 阅读 · 0 评论 -
Codeforce 1296 B. Food Buying
你有s元,每花x元,你可以得到的返利。问你最终能花多少钱。当然是先把整10的花掉,获得返利,加上之前剩下的,循环,知道手里的钱<10.如果不花整10的,比如你有85,你选择花85,和花80,获得的返利都是8元,显然你花85后手里只剩返利的8元,而花80后手里剩下返利的8元加之前剩下的5元,有13元,这13元同理,花10块比直接花13元更优。#inclu...原创 2020-02-05 15:41:57 · 266 阅读 · 0 评论 -
Codeforce 1296 A. Array with Odd Sum
给你一个长度为n的数列,你可以将一个位置上的数改变成数列中其他任意一个数,可以操作无数次。问操作任意次之后,能否将数列之和变成一个奇数。小学数学。奇数个奇数相加还是奇数,偶数个奇数相加是偶数,奇数加偶数是奇数。统计数列中奇数和偶数的个数。如果数列长度n是个奇数,奇数的个数>0即可。意味着把数列中所有数变成一个奇数。如果n是偶数,那需要奇数和偶数的个数都>0。意...原创 2020-02-05 15:34:32 · 268 阅读 · 0 评论 -
洛谷P1553 数字反转(升级版)
洛谷P1553 数字反转(升级版)这里出现的问题是1.审题不清,全为0的情况没有看到。另外还要注意全为0时下标变成-1而不是02.考虑不周全,小数与分数,百分数并不相同。#include <cstdio>#include <iostream>#include <cstring>using namespace std;int main()...原创 2020-02-04 21:40:47 · 337 阅读 · 0 评论 -
Cards
A. Cardstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputWhen Serezha was three years old, he was given a set of cards with lette...原创 2019-09-19 13:09:49 · 875 阅读 · 0 评论 -
Multiplication Table
B. Multiplication Tabletime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputSasha grew up and went to first grade. To celebrate this ...原创 2019-09-19 13:01:19 · 581 阅读 · 0 评论