随笔分类 - ccf 认证历年题目
下一年 ccf 必过好吧
摘要:好像旋转矩阵有更好的做法,但是我觉得这样也足够了,如果需要更好的做法,大家得自己在去找一下。 我主要是找了下规律,然后做出来的 #include<iostream> #include<bits/stdc++.h> #include<cstdio> using namespace std; int n
阅读全文
摘要:多开个数组存次数,没啥好说的 #include<iostream> #include<bits/stdc++.h> #include<cstdio> using namespace std; int n; int num[1005]; int ant[1005]; int main() { cin
阅读全文
摘要:因为题目给的是不同的整数,所以就排序,然后for遍历找出差值为1的就好了 #include<iostream> #include<bits/stdc++.h> #include<cstdio> using namespace std; int n; int num[1005]; int main()
阅读全文
摘要:简单题目,没啥好说 #include<iostream> #include<bits/stdc++.h> #include<cstdio> using namespace std; int A[258]={0}; int n, m, L; int main() { cin >> n >> m >>
阅读全文
摘要:使用 结构体 struct + 自定义 sort轻松搞定 #include<iostream> #include<bits/stdc++.h> #include<cstdio> using namespace std; int n, X, Y; struct point { int i; int d
阅读全文
摘要:将阈值想象成水,安全系数想象成岛屿,从一开始阈值最低,慢慢升高,从低往高淹没岛屿,当岛屿的result为1,淹没扣分,result为0,淹没加分,寻找最佳阈值,使得分数最高。 需要注意的: 使用了结构体将result和y绑定在一起,易于之后的sort排序 sort自定义排序 淹没岛屿时要淹没所有相同
阅读全文
摘要:借用岛屿情况来分析这个题。考虑p足够大的情况,所有的数都被海水淹没了,只有 0 个岛屿。然后,海平面逐渐下降,岛屿数量出现变化。每当一个凸峰出现,岛屿数就会多一个;每当一个凹谷出现,原本相邻的两个岛屿就被这个凹谷连在一起了,岛屿数减少一个。使用数组cnt[],cnt[i] 表示海平面下降到i时,岛屿
阅读全文
摘要:该题关键点在于:分段计算 先对f分段:for(int i=1;i<=n+1;i++) //以 f(i) 为区域划分计算 在此区域内f的取值相同,值为:i-1。 再对每个f值相同的区域按照g值进行分段:for(int j=a[i-1];j<=a[i]-1;j=j+Long){//此区间内有Long个g
阅读全文
摘要:差分性质:要给数组 Q 的第 a 个到 第 b 个数(从1开始的数组)加 k,那就 Q[a]+=k, Q[b+1]-=k。 最后再将 Q 求前缀和还原数组 : 遍历 Q[i] = Q[i] + Q[i-1] #include<iostream> #include<bits/stdc++.h> int
阅读全文
摘要:太简单了,没啥好说的 n = int(input()) numSum = 0 for i in range(0, n): w, score = map(int, input().split()) numSum += w*score y = max(0, numSum) print(y)
阅读全文
摘要:略微观察以下A序列与B序列的关系即可 n = int(input()) ListB = list(map(int, input().split())) sumMin = 0 sumMax = 0 # 一直出现的都是最大的A sumMax = sum(ListB) # 当没有出现新的最大值B时,直接加
阅读全文
摘要:当 List2[j] 小于 0 的时候证明有负的 j 没有配对,大于 0 的时候证明有正的 j 没有配对,只要配对成功一次就多一对相反数 n = int(input()) List1 = list(map(int, input().split())) List2 = [0]*1005 count =
阅读全文
摘要:找到个出现最多的,并且在出现最多中最小 n = int(input()) List1 = list(map(int, input().split())) List2 = [0]*10000 maxNum = 0 for i in List1: List2[i] += 1 if List2[maxNu
阅读全文
摘要:观察式子发现规律 n, N = map(int, input().split()) num = list(map(int, input().split())) sum1 = 0 for i in range(0, n-1): sum1 += (num[i+1] - num[i]) * (i+1) s
阅读全文
摘要:没什么好说的,就是判断 y 是否在之前有出现在左边过而已 numMap = {0} n, k = map(int, input().split()) count = 0 for i in range(0, k): x, y = map(int, input().split()) if y not i
阅读全文
摘要:题目三个要点: 藏宝图和绿化图对应的部分的树木数是一样的。 在1的前提下,只用遍历藏宝图的有树木的坐标看绿化图中是否有对应的。 藏宝图在左下角对应绿化图某个坐标的时候,剩下藏宝图不要超出绿化图界限。 #include<iostream> #include<bits/stdc++.h> using n
阅读全文
摘要:难点在于求方差的时候不能进行先求和再平均,否则会爆掉 可以采用 compute 函数所实现的方法 #include<iostream> #include<bits/stdc++.h> using namespace std; int n; int a[1005]; int sum = 0; // 平
阅读全文