ACM_思维提升
Carney_Lsz
要相信每天都值得期待.
展开
-
【Codeforces】 Vitaly and Strings
问题描述维塔利是一个勤奋的学生,在大学阶段,他从来没有逃过一堂课。他总是按时做作业,并顺利通过考试。在最后一节课,老师给了他两个字符串s和t。这两个字符串的长度相同,由小写英文字母组成,字符串s的字典序比串t小。维塔利想知道是否有这样的字符串:字典序比字符串s大,同时字典序小于串t。此字符串也应包括小写英文字母和相同的长度。让我们帮维塔利解决这个简单的问题!Input第一行包含字符串s(1≤|s| ≤100),由小写英文字母组成。这里,|s| 表示字符串s的长度。第二行包含字符串t(原创 2020-10-05 10:08:55 · 138 阅读 · 0 评论 -
【第九届河南省大学生程序设计大赛】F题:Decimal integer conversion
问题描述:XiaoMing likes mathematics, and he is just learning how to convert numbers between differentbases , but he keeps making errors since he is only 6 years old. Whenever XiaoMing converts anumber to a new base and writes down the result, he always writ原创 2020-09-27 10:46:08 · 121 阅读 · 0 评论 -
【第九届河南省大学生程序设计大赛】A题:表达式求值
问题描述:假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式。2. 如果 X 和 Y 是 表达式,则 X+Y, X*Y 也是表达式; *优先级高于+.3. 如果 X 和 Y 是 表达式,则 函数 Smax(X,Y)也是表达式,其值为:先分别求出 X ,Y值的各位数字之和,再从中选最大数。4.如果 X 是 表达式,则 (X)也是表达式。例如:表达式 12*(2+3)+Smax(333,220+280) 的值为 69。请你编程,对给定的表达式,输出其值。 输入:【标.原创 2020-09-27 10:13:06 · 225 阅读 · 0 评论 -
【Codeforces】 Roadside Trees (Simplified Edition)
题目链接题目大意:给你一个序列h,表示一排树的高度,你每秒可以完成下列事件之一:将自己的高度改变1。 在树顶停留不动。 跳到下一棵树的同一高度,要求下一棵树的高度不低于你现在的高度。最开始你位于第一棵树的底下(高度为0)输出在每一棵树的树顶都停留1s需要的最短时间。AC:#include<iostream>using namespace std;int main(){ int n, i, sum=0; int a[100003]; cin >...原创 2020-08-05 01:46:02 · 218 阅读 · 0 评论 -
【Codeforces】You‘re Given a String...
题目链接题目大意:在所给字符串中找出最少出现两次的最长子串的长度。AC:#include<iostream>#include<cstring>#include<map>using namespace std;map<string, int> m;string s, str;int main(){ cin >> s; for(int i=s.size();i>=1;i--) {原创 2020-08-05 01:26:09 · 176 阅读 · 0 评论 -
【Codeforces】Roma and Lucky Numbers
题目链接题目大意:有一种数名叫 lucky number,这些数都是正整数,且其十进制表示只包含 lucky digits44和77。举个例子,4747,744744,44是 lucky number;而55,1717,467467不是。Roma 有n个数,他想:有几个数包含的lucky digits 不超过k个。思路:对于n个整数,在每次输入后对其每个位权上的数进行判断是不是4或者7,若是则用cnt加一并在最终看cnt是否大于k;若不大于k,就对ans加一。AC:...原创 2020-08-05 00:55:17 · 206 阅读 · 0 评论 -
【Codeforces】Doors Breaking and Repairing
题目链接题目大意:A,B两个人玩一个回合制的游戏。他们面前共有N扇门,每个回合分为两个阶段:第一阶段:A走,他遇到一个门可以破坏这个门的耐久度,最大可破坏x(破坏后门的耐久度不能低于0);第二阶段:B走,他遇到一个门可以修复这个门的耐久度,最多修复y(修复后不能高于门的起始耐久度)。这个游戏持续回合,问当游戏结束,有多少耐久度为0的门。思路:游戏回合数(间接意思回合无限大)表明,这道题的主要突破点在于x、y的大小:当x>y时,修复的速度没有破坏的速度快,所以无论B如何修复原创 2020-07-27 20:21:13 · 152 阅读 · 0 评论 -
【Codeforces】Birthday
题目链接题目大意:n人围成一个圈,每个人有自己的高度,对这n个人进行重新的排列,使得满足任意两个人之间高度差的最大值最小并输出这个顺序。思路:因为是环形排列,所以先将原数组从小到大排序,然后左边放一个,右边放一个。可以利用按大小顺序排序后的下标奇偶性来判断放左还是放右。AC:#include <iostream>#include <algorithm>using namespace std;typedef long long ll;ll a[1010]原创 2020-07-27 19:24:39 · 174 阅读 · 0 评论 -
【Codeforces】Sequential Nim
思路:这道题怎么说呢,我起初是天真的查找奇偶数,后来发现发现想错了,就查找非1数个数和数字1的个数,但搞了半天比较迷,最后发现规律:若总数n1,则一定是Firsrt; 若总数n1,查找第一个非1数前的1的个数s;可以发现只有在s0并且s是偶数个时是Second;其他的一定是Firsrt。根据题解的规律:记录数组中所有1的个数y,以及第一个非1数的位置f;若总数ny,若是奇数则一定是Firsrt;若是偶数则一定是Second; 若总数ny,f是偶数时则一定是Second;f是奇数原创 2020-07-22 10:54:36 · 224 阅读 · 0 评论 -
【Codeforces】Common Subsequence (map)
思路:这道题总的来说并不难,但是起初我是利用两个数组来写的。在没找到第一个相同元素时,b数组每输入一个元素则遍历一次a数组查找是否有相同元素,时间复杂度太大。但是后来写完发现利用map直接把元素当作下标存入会更加迅速,节省了时间。AC(两个数组):#include<iostream>using namespace std;int main(){ int t; cin >> t; while(t--) { int n,m; cin >>原创 2020-07-22 09:36:04 · 134 阅读 · 0 评论 -
【Codeforces】Vasya and String(二分、前缀和)
思路:利用二分搜索和前缀和解决。AC:#include<iostream>#include<algorithm>using namespace std;int n, k;string s;int sum[100005];int check(int x){ for(int i=0 ; i+x<=n ; i++) { if (sum[i+x]-sum[i]>=x-k || sum[i + x]-sum[i]<=原创 2020-07-15 11:26:50 · 200 阅读 · 0 评论 -
【Codeforces】Bmail Computer Network(dfs)
思路:怎么说呢,这道题一个DFS就可以了,思路不是很复杂,找父亲节点就行了。AC:#include<iostream>#include<algorithm>using namespace std;int before[200001];void dfs(int now){ if(now!=1) dfs(before[now]); cout<<now<<" "; return ;}int main(){ int n; ci原创 2020-07-15 11:18:23 · 367 阅读 · 0 评论 -
【计蒜客】工作分配(水题)
思路:起初是想到构造二维数组,但是二维数组我好像就把问题复杂化了。然后发现了一个更为简洁的办法,直接来代码吧。AC:#include<cstdio>#include<iostream>using namespace std;int main(){ long long a,b,c,d,e,f,g,h,i,ans=3; cin>>a>>b>>c>>d>>e>>f>>g转载 2020-07-15 11:05:19 · 426 阅读 · 0 评论 -
【计蒜客】假币问题 (水题)
思路:把这个人的运气当成最差的,只要硬币数不是1就找不到假币。所以就用它循环除2,看循环次数就行了。(太水了、实在是不知道写啥了,就这,散会!)AC:#include<iostream>using namespace std;typedef long long ll;int main(){ ll m,d; while(cin >> m) { d=0; while(m!=1) { m/=2; d++; } cout <&原创 2020-07-15 10:51:25 · 347 阅读 · 0 评论 -
【Codeforces】Valhalla Siege(前缀和、二分)
思路:怎么说呢,初入二分与前缀和的门槛(小小的眼睛,大大的疑惑)。遇到这道题发现需要记录上次射出来的弓箭个数杀到哪一个人,这不就是明摆着说用二分、用二分吗(我丢)。但是二分必须要有顺序,哟呵,提醒我搞前缀和。(仔细一考虑,我好像略知皮毛,啥也不会、啥也不是....)最终看了看题解,搞了半天。AC:#include<iostream>#include<algorithm>using namespace std;typedef long long ll;cons原创 2020-07-15 10:40:39 · 178 阅读 · 0 评论 -
【Codeforces】Computer Game(二分)
题意:Vova在打电脑游戏,他很想打完这个游戏。但他电脑的初始电量只有k,而这个游戏有n个回合。每个回合开始前有三个选择:当前电量大于a时, 他可以选择只打游戏, 然后打完这局电量减少a 当前电量大于b(b <a)时, 他可以选择边打游戏边充电, 然后打完这局电量减少b 如果当前电量不大于a和b, 他什么也不能做, 并且失去游戏求,如果Vova能打完这个游戏的话,输出他选择只打游戏(不充电)的最大回合数;如果不能打完这个游戏输出-1.思路:(有两种吧,起初不熟悉二分就直接当思维题搞原创 2020-07-15 10:26:44 · 257 阅读 · 0 评论 -
【Codeforces】Display The Number
思路:这个题仔细考虑1需要2划构成、7需要3划构成、4需要4划构成、2和3和5都需要5划构成、0和6和9都需要6划构成、8需要7划构成;因此进行第一步筛选(即在相同划数中选择最大的合适),所以1需要2划构成、7需要3划构成、4需要4划构成、5需要5划构成(2和3排除,它们比5小)、9需要6划构成(0和6排除,他们比9小)、8需要7划构成;紧接着第二步考虑偶数划数中最合适的数以及奇数划数中最合适的数:当有偶数划时可以选择是9、4、1,但最合适的应该是1,因为它在相同划数时位权更大;当有奇数划时可以选择是8原创 2020-07-15 09:49:19 · 155 阅读 · 0 评论 -
【Codeforces】Party(dfs)
思路:其实就是每个人都有一个或者没有父亲节点,我们要让同深度的人组成一个队伍就可以。 也就是找树的最大深度。AC:#include <iostream>#include <algorithm>#include <cmath>using namespace std;const int maxn = 10000;int fa[maxn];int temp = 0;void dfs(int i){ if (i == -1)原创 2020-07-11 11:33:42 · 255 阅读 · 0 评论 -
【Codeforces】Chloe and the sequence (递归)
题解:将序列写出来可以发现规律,1 + 2x 的位置值都是 1,2 + 4x 的位置的值都是 2,4 + 8x 的位置的数都是 3,8 + 16x 的位置的数都是 4……,因此按照这个规律就可以知道第k个数是谁了。并且由题意可以知道n到1的数量是逐渐增加的,可以利用递归函数进行取余从n向下查找这个元素是什么。AC:#include<iostream>#include<cmath>#include<algorithm>using namespace st原创 2020-07-09 16:25:15 · 323 阅读 · 0 评论 -
【Codeforces】Misha and Changing Handles (map)
题目大意:输入t,则有t组数据。在t组用户中求两个最终关联的id名称并输出;中间id省略,不输出。AC:#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<map>#include<algorithm>using namespace std;int main(){ string a,b; map原创 2020-07-08 14:29:01 · 129 阅读 · 0 评论 -
【Codeforces】Frog Jumps
思路:(青蛙跳跃,'L'向左跳,'R'向右跳)不需要想太多,找出来最远的两个'R'距离并输出即可,需要注意一下首尾都是'R'。AC:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char s[200010];int main(){ int t,n,i,mx,pre; cin >> t; w原创 2020-07-08 14:45:38 · 190 阅读 · 0 评论 -
【Codeforces】Magical Calendar
题目大意:一共有t组数据,且每组数据都输入一个n表示需要连接在一起的天数、一个r表示每周可以有的最大天数,即每周天数可以为w()。以自己定义的每周天数制成(方格表)日历,且在日历上将需要连在一起的天数画出来(涂色);最终观察连在一起的天数可以构成的不同图形个数k,最后输出k。思路:首先,让我们考虑一下如果一个星期有确切的w()天。由此可以得到 a+(a+1)+(a+2)+…+b=(a+b)∗(b−a+1)2如果w<n,则所涂的天数大于一周的天数。所以有w个有效的形状,每个形状有w天宽.原创 2020-07-02 10:19:22 · 316 阅读 · 0 评论 -
【Codeforces】Magical Sticks
题目大意:一共有t组数据,且每组数据都输入一个n。一共有n根魔法棒,且魔法棒的长高度从1每次增加1直到长度n。将魔法棒两两拼接到一起尽可能使拼接后的魔法棒长度一样,然后输出拼接后的魔法棒数目。思路:首先能知道若想得到最多的相等长度魔法棒,我们要从两端选取连接(长的与短的连接),其次看输入的n是偶数还是奇数;若为偶数,按照 1+n=2+(n−1)=3+(n−2)=... 的方法,起始魔法棒可以全部用完,最终我们有n/2根长度为n+1的魔法棒。 当为奇数,按照 n=1+(n−1)=2+(n−2)=..原创 2020-07-02 09:15:23 · 313 阅读 · 0 评论 -
【Codeforces】Short Substrings
题目大意:一共有有t组案例,且每组案在输入时输入的都是由字符串a的子串(长度大于等于2)构成的复合字符串b,现在要把复合时导致的b字符串中重复的字符删去,然后还原得到a串。思路:首先可以确定第一个与最后一个不会重复,因此先挑出它们。至于其他的字符在选取时均有可能重复,则进行遍历判断。如果第i个和第i+1个字符是重复的,那么可以把第i个字符选出来把第i+1个字符跳过遍历。#include<stdio.h>#include<string.h>int main..原创 2020-06-18 23:12:27 · 241 阅读 · 0 评论 -
【Codeforces】XXXX
题目大意:给定一个数x,和长度为n的数组,找出最短的子数组,使得子数组的和不能整除x,不存在这样的子数组输出-1。题解:先考虑两种极端情况,第一种每个数都可以整除x那输出-1,第二种,原数列的和本就来就不能整除x那输出n。现在考虑第二种情况的一般情况,如果原数列和能整除x,我们必定要从左右两端删除一个数,而且要满足题意,这个数必须是不能整除x的,因为原数列和是可以整除x的,所以要满足数组长度最长,只删一个就行(同时删两个不能整除x的反而会有问题),以此类推,详见代码。...原创 2020-06-15 22:36:00 · 300 阅读 · 0 评论