Codeforces 479【B】div3】的更多相关文章

题目链接:http://codeforces.com/problemset/problem/977/E 题意:就是给你相连边,让你求图内有几个环. 题解:我图论很差,一般都不太会做图论的题.QAQ看官方题解过的.大概就是如果这是一个环的话,每一个点的度数都应该是2才对,根据这个进行dfs做标记. 就算是个简单图论,看到还是会一脸懵逼.QWQ.以后还是会多多写dfs和图论啦.不过个人还是更喜欢数论什么的. #include<iostream> #include<vector> usi…
题目链接:http://codeforces.com/problemset/problem/977/F 题意:给你一串数字序列,让你求最长上升子序列,但是这个子序列呢,它的数字得逐渐连续挨着. 题解:LIS的求法去做嘛.经典dp,处理的时候记录一下最大起点的下标,然后在最后循环找的时候,对比一下当前的值是否在逐渐+1即可. 坑点大概就是会RE.QAQ就是开不下dp的数组了嘛. #include<iostream> #include<vector> #include<map&g…
题目链接:http://codeforces.com/problemset/problem/977/D 题意:给你一个数字序列,定了一个游戏规则.你可以对当前数字进行两个操作 1./ 3  如果这个数字能被3整除 2.* 2 你就是要组成一个新的序列,使得这个游戏规则能够成立. 题解:这个规律是猜的.因为题目保证有解,所以能整除3的肯定都会先放在前面.所以排序的时候整除3的放前面,在整除3的这一部分,大的肯定要放在后面啊.因为不放在后面的话就不能构成*2的条件了嘛.QWQ瞎搞瞎搞. #inclu…
题目链接:http://codeforces.com/problemset/problem/977/C 题意:给你n个数字,输出任意一个数字,这个数字刚好大于等于,序列里面k个数字. 题解:排个序,第k个数就是所求.注意几个坑点.k == 0的时候,你要看答案是不是能等于1. 比如 2 0 2 3 这个样例,就可以为1呀.QWQ懂了吧.WA,test4可能就在这儿. #include<iostream> #include<algorithm> using namespace std…
题目链接: http://codeforces.com/problemset/problem/977/B 题意:字符串,找固定长度为2的重复子串出现次数最多的. 题解:我暴力做的.暴力出奇迹. #include<iostream> using namespace std; #define maxn 105 char a[maxn]; int main(){ int n; cin>>n; ; i < n ;i++){ cin>>a[i]; } ; int maxi;…
题目链接:http://codeforces.com/problemset/problem/977/A 题意:这个题,题目就是让你根据他的规律玩嘛.末尾是0就除10,不是就-1. 题解:题解即题意. #include<iostream> using namespace std; int main(){ int n,k; cin>>n>>k; while(k--){ == ){ n /= ; } else{ n-=; } } cout<<n<<en…
(这道题太简单啦...虽说我锤了一上午都没过...我能说这道题和\(CF1029C\)算是同一道题吗...) 按照时间顺序来说...\(CF1029\)在\(CF1028\)前面(而且\(CF1029\)还是\(Div3\)),前后没差多长时间就惊现高相似度题目(所以CF是有多迫切想让大家上分) CF1029C传送门 两道题的唯一差别就是一个是一维,一个是二维(我是不是应该猜一下\(CF1036C\)会出一个三维的),都是范围覆盖,和\(CF1029C\)一样,只需要确定最严格的边界限制,题目要…
活生生打成了大模拟... #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef unsigned long long ULL; typedef pair<int,int>PII; const double eps=1e-5; const double pi=acos(-1.0); //const int mod=1e9+7; const int INF=0x3f3f3f3f; //ht…
题目大意:给定\(n(1\leq n\leq500)\)个数\(a_1,a_2\cdots,a_n(1\leq a_i\leq2\cdot10^{18})\),每个数有\(3\sim5\)个因数,求\(\prod_{i=1}^{n}a_i\)的因数个数 这道题是一个交互题(虽说并不觉得有交互的必要...可能只是为了\(hack\)或者造数据方便吧),非常纯的数\((du)\)学\((liu)\),题目难度不在于结论,而在于代码实现 小学数学告诉我们以下结论:一个正整数\(x\)可以被分解成唯一形…
这道题大致题意是给定\(n\)个十进制整数和一个进制数\(k\),可以用无数多个给定的十进制整数,问这些十进制整数的和在模k意义下有多少种不同的结果(\(k\)进制下整数的最后一位就是这个数模\(k\)的余数). 这明显是个数学题(但是不会做又有什么办法[逃]),既然是求模k意义下的可能结果,我们可以让所有数对k取模,这样可以得到末位数字.但是对于蒟蒻来说这有什么用呢(反正本蒟蒻取模之后也还是看不出来).其实这道题并不是要取模,也不是要用进制,而是在十进制下求最大公约数(下面详细解释). 众所周…
<题目链接> 题目大意: 给你一颗树的所有边,这些边是无向的,然后给你一段BFS序列,BFS都以1为根节点,判断这段BFS序列是否合法. 解题分析: 就是模拟BFS,某个父亲节点的所有子节点必然是连续一段出现的(如果该BFS序合法的话),所以每次从队列中弹出节点的时候,就将对应位置连续的所有儿子全部标记,如果有儿子不是连续的出现在对应位置,则之后永远不会被标记到. #include <bits/stdc++.h> using namespace std; ; int n,vis[N…
LINK 题目大意:给你n,m,k,让你在一个n*m的点阵里构造出一个面积为\(\frac{n*m}{k}\)的三角形 思路 首先要有一个结论是整点三角形的面积分母最多为2,然后就可以判断不存在的情况了 接下来就直接进行构造就可以了 #include<bits/stdc++.h> using namespace std; #define LL long long #define IL inline #define fu(a,b,c) for(LL a=b;a<=c;++a) #defin…
思路: 求所有树的最大高度? 注意:所有树从树根开始? #include <bits/stdc++.h> using namespace std; typedef long long LL; struct asd{ int to; int next; }e[2500]; int head[2500],tol; int pre[2500]; int n; void add(int u,int v) { e[tol].to=v; e[tol].next=head[u]; head[u]=tol++…
思路: 枚举0-9之间的数,然后判断. 然后一鼓作气打成了大模拟....我日啊... 心疼自己. #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N=1e4+10; int n,k; char s[N],ss[N]; int num[19]; int cnt[19],len; int all[N][15]; void solve(int x) { int sum; for(int i=0…
思路: 7越多越好,然后从7最多个数枚举过去,判断一下剩下的能不能用4解决就好了: #include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { int m,n; scanf("%d",&n); int q=n/7; for(int i=q;i>=0;i--) { m=i*7; int x=n-m; if(x%4==0) { x/=4; for(int k=0;…
题意: n g dough  m种商品? 每种有ai stuffing, 拿bi stuffing + ci dough -> di tugriks rest c0 dough -> d0 tugriks 求最大的tugriks 思路: dough是爸爸, dp[i] 代表 在花费 i 情况下 前 j 个 商品的最大. 枚举在 k g dough 下的各种收入情况,取最大: 大致分成两个部分,用ai + bi 获得的钱,剩下的dough去干嘛得到. #include <bits/stdc…
意: 求最少需要几个s1串拼接存在子串s2 (1≤|s1|≤1e4,1≤|s2|≤1e6). 思路(感谢ZQC): 每个字母的出现位置存个vector. 假设你当前已经用了A串的前x个字符,现在想要匹配一个'x',那你就在'x'的vector那里二分出第一个大于x的位置, 如果匹配不到的话,就相当于需要一个新的串. #include <bits/stdc++.h> using namespace std; typedef long long LL; vector<int>xs[30…
总结:能这么DP就这么写! 多练位运算标记. #include<bits/stdc++.h> using namespace::std; const int N=55; const int INF=0x3f3f3f3f; int n, m, dp[N][2][2][2]; char s[N][N]; bool isdigit(char ch) { if(ch>='0' && ch<='9') return true; return false; } bool isl…
FST的时候好像挂了挺多人的~ 其实思路没啥难的,就是更好地理解题意吧,1到n一直循环,直到没有人能vote,一个人能vote也能叉掉一个人,一个人被叉就不能vote,判谁赢. 其实我管vote干嘛,我管好互叉就好了啊,直到局势一边倒,也就是不能叉了,谁多谁赢,这样肯定是要么D多R多,复杂度不大. #include<bits/stdc++.h> using namespace std; typedef __int64 LL; const int N=2e5+10; bool vis[N]; c…
思路:  dp[i][0] 代表取的时候左边没有 dp[i][1] 代表取的时候右边没有 dp[i][2] 代表取的时候左右都没有 dp[i][3] 代表取的时候左右都有 然后自己转移吧= =. 注意两个区间端点:  如果旁边有取a[i], 如果没有取b[i].  只有一个的时候取a[i].... 太狗了,这题意! #include<bits/stdc++.h> using namespace std; typedef __int64 LL; const int INF=0x3f3f3f3f;…
题意: 给你一幅图,然后有几个特殊点 和不特殊点,给你一些已经连了的边,在保证特殊点不能连的前提下,问最多还能添几条边,双向边 思路: 简单题,就是一个特殊点就是一个集合,然后搜一下,最后把还有没连的点连到集合元素最多的上去,然后把所有边都算出来,减去已经连的边就好了 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=1e3+10; const int M=1e5+10; struct…
 题意就是一个串在另一个串出现几次,但是字符不能重复匹配, 比如aaaaaaa aaaa的答案是1 思路: 本来写了个暴力过的,然后觉得KMP改改就好了,就让队友打了一个: #include <bits/stdc++.h> using namespace std; typedef long long LL; const int MAX=1000010; int n,m; char a[MAX],b[MAX]; int nextval[MAX]; LL ans; void get_next(ch…
题意: 给一个字符串代表相邻学生的比较,L代表左边多,R表示右边多,=表示左右相等. 保证每个人拿糖>=1,在分糖最少的情况下,输出每个学生所分得的糖. 思路: 模拟一下,第一个人一开始拿1个,然后模拟下去,如果是=,那就=前面的,如果是R,那就比前面的多一个,如果是L,最好的情况就是拿1个,但是有可能前面那个也是1,那么就往前更新,如果符号是=,前面那个等于现在的,如果是R,那么直接跳出,不用往前更新了,因为顺序的更新本身就比之前的大了,如果是L只要判断一下前面的是不是和当前的相等,是的话,前…
题意: s是这个人开始位置:连续相同大写字母是 Each of the k trains,相应的火车具有相应的字母: '.' 代表空: 有个人在最左列,上面有连续字母代表的火车,火车从左边出去的话,会从右边继续进来, 一开始是人先往右走一步,然后上下或者一步,然后火车往左移两步. n有100,代表长度,k代表火车的数量: 思路: BFS; 走完还要再走两个= =.妈个鸡啊. 一开始一直踏马地觉得没必要BFS,没必要BFS...后面搞懂了之前比赛中的思路是递推,也就是DP,但是踏马的DP递推真的写…
题意: 在原字符串中修改数量最少,然后保证最小字典序. #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N=2e5+10; int a[100]; char s[N]; char ans[N]; int main() { scanf("%s",s); int len=strlen(s); memset(a,0,sizeof(a)); if(len%2==0) { fo…
题意: 查询数 和 最大的队列容量+1: 按时间顺序 ti代表,第i个出线的时间: di代表,第i个需要处理的时间: 对于第i个输出他所需要的时间完成,或者拒绝进入输出-1: 思路: 真是MDZZ了,模拟. 主要就是开个队列存了一下每个任务结束时间,然后对于每个任务把队列里小于该任务开始时间pop掉,队列里的个数就可以代表当前处理个数了 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N…
转自: http://blog.csdn.net/qq_26071477/article/details/51892995 #include<stdio.h> typedef long long ll; ll check(ll n) { ll res=0; for(ll k=2; k*k*k<=n; k++)//k是ll范围 不可犯糊涂 res+=n/(k*k*k); return res; } int main() { ll m,res=-1,l=1,r=1e18,mid; scanf…
sort一发,去重 #include<cstdio> #include<iostream> #include<queue> #include<string.h> #include<string> #include<map> #include<algorithm> using namespace std; const int N=55; int a[N]; int n; int main() { scanf("%d…
比赛的时候绝壁打麻烦了... 考虑的好麻烦...wa7...还要判断出来的是不是positive的... 好吧..认了.. #include<cstdio> #include <map> #include<iostream> #include<string.h> #include<algorithm> using namespace std; typedef __int64 LL; const int N=5e2+10; LL ma[N][N];…
题意: 给你n个数,每次只能让一个数+1,或者-1,目标是最终使这个序列构成一个非递减的序列: n是5e3,复杂度n^2内.值是1e9: 思路: 可以发现子结构是保证一个区间的非递减, 如果只是dp[a][b]代表在[a,b]上需要的最小步数,这样很难处理a,b位置的值,且不构成递推性: 所以可以在递推中(前i个)去dp以 j 值为末端的区间需要的最小步数. dp[i][j]=min(dp[i][j],min(dp[i][k]+cost); //k∈[1-j]; 然而j值是1e9,且特么n是5e…