- 博客(10)
- 收藏
- 关注
原创 Codeforces Round #788 (Div. 2) A~D
A. Prof. Slim 题意 给定长度为n的整数序列a1—an,每次可以进行如下两种操作中的一个: 互换两个不同符号元素的符号(即:把一个正数和一个负数变成他们的相反数) 选择两个元素,使他们拥有不同符号 问:能否通过有限次操作把序列a1—an变成单调不下降序列? 思路 负号的数量是恒定的,把所有的m个负号给最前面的m个元素,然后判断是否可行即可。 代码实现 void solve() { int t = 0; cin >> t; while (t--) { int n = 0
2022-05-08 10:47:02
560
原创 AtCoder Beginner Contest 245
AtCoder Beginner Contest 245 **C - Choose Elements **(dp) 原题 题意 给定两个长度为N的整数序列A和B,整数K。询问是否能找出来满足下列两个条件的长度为N的整数序列X: Xi是Ai或Bi中的其中一个 |Xi - Xi+1|<=K 思路 dp.第i个位置状态与第i-1个位置的状态有关,因此可以用dp来解决。 d[i] [j] 表示下标为i的j点是否可达,最后查看d[n-1] [j]是否可达即可。 代码实现 //当前位置的状态与前一个位置的状
2022-03-28 17:56:12
655
2
原创 Codeforces Round #776 (Div. 3)
A. Deletions of Two Adjacent Letters 题目描述:给一串字符串s和一个字符c,判断该字符串能否在被若干次拿走连续的两个字符后只剩下c字符。本题的核心在于连续的两个字符。 思路:本题的思路不是很难,我们只需要判断s中的c字符前有多少字符即可,若字符数目为偶数或0,说明可以变成c;若字符数目为奇数,则不能变成c。 #include<cstdio> #include<iostream> using namespace std; int main()
2022-03-10 21:06:16
226
原创 【算法竞赛入门经典】第五章-木块问题(详细注释)
#include<cstdio> #include<iostream> #include<vector> #include<string> const int maxn = 30; int n;//一共有n堆 using namespace std; vector<int>pile[maxn];//声明一个vector数组pile,一共有n堆,每一堆的高度是不确定的,又都是一个vector数组 (相当于一个二维vector数组) void .
2021-11-19 18:46:01
1022
原创 【算法竞赛入门经典】第三章-用指针数组行使if功能
#include<stdio.h> const char* msg[] = {"not a palindrome","a regular palindrome","a mirrored string","a mirrored palindrome"}; int main() { char s[30]; while(scanf("%s",s)==1)//"1"表示有1个字符串 { int p=1,m=1; //判断s是回文串还是镜像串 //p=0表示不是回文串,m=0表示不.
2021-11-06 16:05:53
140
原创 【算法竞赛入门经典】第三章-生成元
题干:如果x加上x的各个数字之和得到y,就说x是y的生成元。给出n(1≤n≤100000),求最小生成元。无解输出0.例如,n=216,121,2005时的解分别为198,0,1979 思路:本人一开始看到这题时首先想到了枚举(好吧大家都能想到),但本书提供了一种奇妙的方法:做表。 #include<stdio.h> #define maxn 100005 int arr[maxn]; int main() { int T,n; memset(arr,0,sizeof(arr));
2021-11-04 22:02:23
587
原创 一个不算技巧的技巧
变量在for循环外定义后,参与for循环后不会销毁,这我还是第一次知道(啊这......) int main() { int i = 0; int s[10] = {0}; scanf("%s",&s); for(i=0;s[i]!=0;i++);//找到数组s中第一个非0的元素,并保存此元素的下标——可以用来在数组中找元素,比较方便 return 0 ; } ...
2021-11-03 21:03:41
99
原创 【算法入门经典】第三章-蛇形填数
本题思路为:先创建一个二维数组,然后找到填数的起始位置,之后用“下-左-上-右”的走法实现一个循环,然后不断重复这个循环就可以实现指定大小的填数了。 那么如何保证填数的时候不会填到已经填完数的位置呢?如果仅仅靠单纯的循环显然无法做到这一点,所以我们需要在循环的条件控制中加入一些“特殊”的限制。那么,这些限制是什么? 这个时候就要引出我认为这个题目想要告诉我们的最核心的思想:先判断,再行动。 这个思想个人认为应当十分重要,并且在今后做题时可能还会多次遇到,而这也是我写本篇博客的理由——帮助记忆这个思想并
2021-11-03 20:50:50
289
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅