摘要:
题面传送门 思路 一看嘛,不就是两遍$dp$,结果标签上写着个单调队列,我怎么想不出来如何单调队列啊。 于是,就只好打了暴力$dp$结果$A$了。 代码 #include<bits/stdc++.h> using namespace std; int n; int a[101]; int f1[10 阅读全文
摘要:
题面传送门 思路 我明知正解是枚举每一位是否进位然后用高斯消元来验证是否有解。 可是我偏不!!!! 我偏偏$dfs$。 剪枝剪枝+剪枝。 剪枝一:从低位的数开始搜索。 剪枝二:枚举每一个字母是什么数的时候从大到小枚举。 剪枝三:因为每一位最多只会进1,所以判断每一位如果不是这样的就直接$return 阅读全文
摘要:
题面传送门 思路 本蒟蒻表示:我只会用优先级队列做。 贪心:每一次只要取出最少的两堆合并就可以了。 代码 #include<bits/stdc++.h> using namespace std; int n; priority_queue<long long,vector<long long>,gr 阅读全文
摘要:
题面传送门 思路 $STL$真好,有两个函数: next_permutation() prev_permutation() 分别是求出数组的下一个排列,和上一个排列。 可以就返回$1$,如果无法操作了,返回$0$ 代码 #include<bits/stdc++.h> using namespace 阅读全文
摘要:
题面传送门 思路 一道模拟题,注意下细节 代码 #include<bits/stdc++.h> int s,h; int main(){ int x; for(int i=1; i<=12; i++){ scanf("%d",&x); s=s-x+300; if(s<0){ printf("-%d" 阅读全文
摘要:
题面传送门 思路 因为只有唯一的顺序才完所有的花生,所以直接模拟即可 代码 #include<bits/stdc++.h> using namespace std; int n,m,t; int k; struct zj{ int x,y,sum; bool operator < (const zj 阅读全文
摘要:
题面传送门 思路 直接$dfs$,注意要输出后序,即为先左子树再右子树最后根 代码 #include<bits/stdc++.h> using namespace std; int n; string a; void dfs(int l,int r){ if(l<r){ dfs(l,(l+r)>>1 阅读全文
摘要:
题面传送门 思路 一道模拟题,直接打擂台即可 代码 #include<bits/stdc++.h> using namespace std; int n,k,maxx; int x,y; int main(){ for(int i=1;i<=7;i++){ cin>>x>>y; if(x+y>max 阅读全文