- 博客(821)
- 问答 (2)
- 收藏
- 关注
原创 PAT L2-014【二分】
思路:最后发现对当前列车比我大的编号的栈有没有就好了,所以开个vector存一下,然后二分一下vector找一下第一个比我大的数就好了#include using namespace std;typedef long long LL;const int N=1e5+10;int n,a[N];vectorq;int main(){ scanf("%d",&n); for
2017-03-24 14:43:29 298
原创 CodeForces 137C【贪心+优先队列】
这种区间的贪心好像都出“烂”了?不过还是想写一下。。。先按照区间左端点排序一下,然后搞个优先队列维护当前最小的右端点。#include using namespace std;typedef long long LL;const int N=1e5+10; struct asd{ int x,y;}q[N];bool cmp(asd a, asd b){ if(a
2017-03-23 00:09:11 546
原创 CodeForces 131D【图特性+BFS】
题意:只有一个环,然后环都是0(环缩点相当于树的根),然后其余的输出到根的距离思路:可以从度为1的 开始搜 把那些分支全标记掉,然后再取没有标记掉的,BFS一下搞出距离。具体这个标记:倒着搜这样肯定没有多对一,标记掉度等于2的那些点就好了,度>2的要减减,而且环里的点的度不可能搜到度 = 2 因为环=点的度为2,他又连出一条边 度=3。后话:这种n个点 n条边/n-1条
2017-03-23 00:02:09 595
原创 PAT1060【大模拟啊】
怎么麻烦怎么来了???提供几个案例:5 0.00001 0.000010 0.0 0.02221 0.001 0.20002 005.06 0.2301 00.020 0贴份代码跑。。#include using namespace std;typedef long long LL;int n,m;string s1,s2;string a,b
2017-03-22 00:02:52 441
原创 CodeForces 124C【连通块】
思路:a素数->b合数c素数->b合数a,c属于一类so,预处理相同的,并且计数。1000怎么搞都无压力;我这里也预处理了字母个数,从集合大的枚举下来,每次拿字母个数最多的去匹配。#include using namespace std;typedef long long LL;const int N=1e3+10;bool isprime(int x){
2017-03-21 22:54:48 656
原创 PAT 1071【STL string应用】
1.单case很多清空没必要的2.string+ char 最好用pushback3.string +string就直接+#include using namespace std;typedef long long LL;const int N=2e6+10;map mp;string temp,res;int num;string s;int
2017-03-21 22:50:07 634
原创 CodeForces 116C 【BFS】
思路:求所有树的最大高度?注意:所有树从树根开始?#include 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[
2017-03-20 22:38:02 483
原创 CodeForces 116B【二分匹配】
思路:暴力。。我不会呀。。YY一个二分匹配嘛,然后数组开小了。GG for an hour.#include using namespace std;typedef long long LL;int cy[110];int cx[110];int n,m;char ma[15][15];int g[15][15];int mma[110][110];int dx[
2017-03-20 22:29:16 480
原创 CodeForces 118C 【模拟】
思路:枚举0-9之间的数,然后判断。然后一鼓作气打成了大模拟。。。。我日啊。。。心疼自己。#include 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];
2017-03-20 22:27:07 191
原创 二分图中的匹配
问题一(未完):考虑n行m列的棋盘,其某些方格禁止落子。能够被放到棋盘上的非攻击型车的最多个数。考虑4行5列的棋盘,其落子位置如下表: y1y2y3y4y5x1 * x2 * *x3* * *x4*
2017-03-20 00:56:52 291
原创 CodeForces 110C 【构造】
思路:7越多越好,然后从7最多个数枚举过去,判断一下剩下的能不能用4解决就好了;#include 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--) {
2017-03-20 00:09:18 400
原创 CodeForces 106C 【DP】
题意:n g dough m种商品?每种有ai stuffing, 拿bi stuffing + ci dough -> di tugriksrest c0 dough -> d0 tugriks求最大的tugriks思路:dough是爸爸,dp[i] 代表 在花费 i 情况下 前 j 个 商品的最大。枚举在 k g dough 下的各种收入情况,取最大;大致
2017-03-20 00:03:49 426
原创 PTA 1045【DP】
思路:DP[ i ] 代表以值 i 结尾的当前最长长度。每次枚举序列数组,dp[ i ] = max( dp[ i ] ,dp[ a[j] ] + 1);#include using namespace std;typedef long long LL;const int N=2e2+10;int n,m;int a[N],id[N];int dp[N],x;int m
2017-03-19 09:37:59 378
原创 51nod1419 【数学】
思路:n考虑n>3:我们可以轻松证明n,n-1这两个数互质:设gcd(n,n-1)=g,n=g*k1,n-1=g*k2;n-(n-1)=g(k1-k2)=1;所以 g=1.当n,n-2互质就更好了,n*(n-1)*(n-2)最大呀。设gcd(n,n-2)=g,n=g*k1,n-2=g*k2;n-(n-2)=g(k1-k2)=2; 得g很好发现,g要么是1
2017-03-18 22:20:34 418
原创 CodeForces 104C【树特性】
题意:判断这副图是否满足根是一个环的缩点,然后其余点都是一个点,满足树特性。思路:一开始就像无向图缩点乱搞,然后实在太烦搞不下去。。。。一副图是满足结点和边数量相等,且连通,则一定有一个环。so...实际代码只有判连通= =#include using namespace std;typedef long long LL;const int N=1e2+10;int
2017-03-17 23:02:58 385
原创 PAT1089【归并排序】
这题略。。。恶心。。他说归并排序依次是相邻有序两块合并,而一向打惯了递归???#include using namespace std;typedef long long LL;const int N=1e2+10;int b[N];void Merge(int a[], int temp[], int Left, int Mid, int Right){ int
2017-03-15 00:14:31 405
原创 PAT L2-006【二叉树中序后序构造树】
#includeusing namespace std;typedef long long LL;struct BT{ int w; BT *L; BT *R;};BT* Creat(int *post,int *in,int n){ BT* p; for(int i=0;i<n;i++) { if(post[n-1]==in[i]) { p=(BT*)m
2017-03-13 23:13:09 355
原创 PAT12-012【建最小堆】
卧槽。。没看清 值 还有负的。。PS: 注意他说是一个一个插入的,也就是插在完全二叉树的最末位置,然后向上更新。#includeusing namespace std;typedef long long LL;int a[1010];void BuildMinHeap(int n){ for(int i=1;i<=n;i++) { scanf("%d",&a[i]);
2017-03-13 00:44:47 380
原创 PAT 1087【二级最短路】
二级最短路+二级最短路,就是DP过程吧。代码稍微注释一些,毕竟贴代码不好。。#includeusing namespace std;typedef long long LL;const int INF=0x3f3f3f3f;const int N=4e4+10;struct asd{ int cost; int to; int next;}e[N];int head[2
2017-03-11 11:13:34 529
原创 Codeforces570C 【简单标记】
题意:给定一个长为n的字符串(包含小写字母和’.’),有m次操作每次操作可以修改字符,并询问修改后有多少对相邻的’.’思路:标记。#includeusing namespace std;typedef long long LL;const int N=3e5+10;bool vis[N];char s[N];int n,m,len,ans,x;int main()
2017-03-10 17:59:49 451
原创 铁轨+卡片游戏【栈+队列】
1280: 铁轨时间限制: 1 Sec 内存限制: 128 MB提交: 118 解决: 59[提交][状态][讨论版]题目描述 某城市有一个火车站,铁轨铺设如图所示。有n节车厢从A方向驶入车站,按进站顺序编号为1~n。你的任务是让它们按照某种特定的顺序进入B方向的铁轨并驶出车站。为了重组车厢,你可以借助中转站C。这是一个可以停放任意多节车厢的车站,但由于末端封顶,
2017-03-10 16:53:25 578
原创 音乐会的等待【单调栈】
1308: 音乐会的等待时间限制: 1 Sec 内存限制: 128 MB提交: 297 解决: 89[提交][状态][讨论版]题目描述 N个人正在排队进入一个音乐会。人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人。队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的。 写一个程序计算出有多少对人可以互相看见
2017-03-10 16:49:50 980
原创 51nod1202【DP-树状数组维护】
思路:DP[i]代表从1 到 i 以 a[i] 为末尾的子序列个数,dp[i]=dp[i]+dp[j](a[i]!=a[j]) +1利用树状数组维护以值 a[i] 结尾的子序列个数。 #includeusing namespace std;typedef long long LL;const LL mod=1e9+7;const int N=1e5+10;LL c[N];
2017-03-10 00:13:31 377
原创 51nod1113【矩阵快速幂】
思路:裸的矩阵快速幂,读完题,感觉有点对不起四级算法题这一类。#includeusing namespace std;typedef long long LL;const LL mod=1e9+7;int n;struct asd{ LL a[102][102];};asd mul(asd x,asd y){ asd ans; memset(ans.a,0,size
2017-03-09 23:43:40 457
原创 51nod1255【贪心-栈的应用】
思路:大体可以看到:大的越后面越好,但是首先要保证如果他对于一个比他小的字符后面存在他。主要操作就是利用栈,每次对栈里的元素询问是否比他大,且他的后面还存在。#includeusing namespace std;char s[100010];int len,num[27];bool vis[27];stackq;vectorxs;int main(){ xs.cle
2017-03-09 23:17:30 438
原创 Lightoj1059【最小生成树】
题意:使得所有的位置都能通向一个机场,问最小花费。思路: 最小生成树。本来还想标记一下没有出现过的点,其实那个数组已经解决了。==。 PS:注意路比建造机场还贵?直接造机场得了?if there are several answers with minimal cost, choose the one that maximizes the number of airport
2017-03-09 20:12:21 133
原创 SPOJ IAPCR2F 【并查集】
思路:利用并查集/DFS都可以处理连通问题。PS:注意Find()查找值和pre[]值的区别。#includeusing namespace std;const int N=1e3+10;int val[N];int pre[N],n,m;vectorxs,ans;int Find(int x){ int r=x; while(pre[r]!=r) r
2017-03-08 23:23:39 395
原创 SPOJ SERGRID 【BFS】
思路:在一个方向上走K步,基础BFS。注意标记;注意路径;PS:显著注释是记录路径。#includeusing namespace std;const int N=5e2+10;char ma[N][N];bool vis[N][N];int dx[4]={0,0,-1,1};int dy[4]={1,-1,0,0};/***************///in
2017-03-08 23:21:30 433
原创 Lightoj1007【欧拉函数-素数表】
基础题。PS:注意unsigned long long; 以及%llu#includeusing namespace std;typedef unsigned long long ULL;typedef long long LL; const int N=5e6+10;bool isprime[N];ULL res[N];void init(){ res[1]
2017-03-08 21:43:42 372
原创 lightoj1009【DFS】
思路:连通快+二分图,每次+二分图大的元素个数。#includeusing namespace std;typedef unsigned long long ULL;typedef long long LL;const int N=2e4+10;bool ex[N],vis[N];vectore[N];int n,au,av; void DFS(int u,int fla
2017-03-08 21:41:24 141
原创 lightoj1010【规律】
思路:根据案例的规律其实已经猜的差不多了,answer=n*m/2;有一条边是1的情况,也很好判断,answer=n*m;就是有一条边是2的时候比较隐秘:是连续2*2一块可以填,然后2*2不填,没想出总结的公式,就直接模拟了。#includeusing namespace std;typedef unsigned long long ULL;typedef long long
2017-03-08 21:39:21 570
原创 Lightoj1028【计算约数个数】
思路:最终就是求一个数的约数(除了1)对吧.然后想要枚举sqrt(N)受阻,枚举素数数组受阻,加上prime[i]*prime[i]#include using namespace std;typedef long long LL;LL prime[1000100];bool IsPrime[1000100];int num;void init_prime(){
2017-03-06 20:36:27 608
空空如也
解高次方程,除二分法
2016-01-22
C语言memset函数赋0问题
2015-11-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人