
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
因为最近被getchar弄的很烦所以今天中午好好梳理一下getchar()从缓冲区读走一个字符,相当于清除缓冲区前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误下面用一个...
题意:给你一个数组,问从某处分成两个排列的方案数及方案。分界点存在于只出现一次或两次中后出现的数处,判定条件为前后数列长度等于数组下标对应的长度和各自数列中的最大值,mapmapmap 记录分界点,setsetset 增删,模拟即可。AC代码:const int N = 2e5 + 10;int n, m, k, x;int res, tmp, cnt, pos;int a[N]...
题意:给出 nnn 和 kkk ,要求在 [1,n][1, n][1,n] 中找出不同的 kkk 个数,使得有规律,所有 aia_iai 必须能被最小值 a1a_1a1 整除。只要枚举 a1a_1a1 的值,然后计算组合数就行了。AC代码:const int N = 5e5 + 50;int n, k;const int mod = 998244353;int F[N], Finv[N],
题意:求一个下标单调递增且互为倍数,且满足若 i>ji>ji>j,则 si>sjs_i>s_jsi>sj的最长子序列。简单 dpdpdp。AC代码;const int N = 2e5 + 10;int n, m, k;int cnt, res, pos, ans;int a[N], dp[N];int main(){int t;sd(t);while (t-
A. Johnny and Ancient Computer模拟判断。AC代码:int main(){int t;sd(t);while (t--){ll n, m;sldd(n, m);if (n == m){puts("0");continue;}ll ans = 0;if (n < m)swap(n, m);ll res = n / m;if (n % m != 0 || res &a
题意:给定一个长度为 NNN 的数字序列,要求你求出每个长度为 KKK 的区间内的最小值与最大值。单调队列做法:const int N = 1e6 + 10;const int mod = 998244353;int a[N], maxx[N], minn[N], queue1[N], queue2[N];//queue存位置int i, n, k, front1, front2, tail1,
分段枚举。AC代码:const int N = 2e5 + 50;ll n, m, a, r;ll h[N], sum[N], suf[N];int main(){cin >> n >> a >> r >> m;rep(i, 1, n)sld(h[i]);sort(h + 1, h + 1 + n);sum[0] = 0;rep(i, 1, n)su
题意;给你一个数组 aaa,对于任意的两个 k1k_1k1 和 k2k_2k2,是否存在 k1+a[k1k_1+a[k_1%n]!=k_2+a[k_2%n]k1+a[k1然后推一下就可以发现它和找 (i+ai)%n=(j+aj)%n(i+a_i)%n=(j+a_j)%n(i+ai)%n=(j+aj)%n 是等价的。然后注意负数取模即可。AC代码:const int N = ...
A. XXXXXxxx 倍数-非 xxx倍数 = 非 xxx 倍数,知道这个就很好做了,先求全部的和,然后找到首尾最近的那个不是 xxx 倍数 的位置减去就行。AC代码:const int N = 2e5 + 50;int n, m, x;int a[N];ll sum;int main(){int t;sd(t);while (t--){sdd(n, x);sum = 0;rep(i, 1, n
题意:给你一个数组,你需要重新排列这个数组的元素,使得相邻两个元素的差值呈非递减。排序后从中间位置开始输出,输出一个后面的输出一个前面的即可。AC代码:const int N = 1e5 + 10;int n, m;int a[N], b[N];int main(){int t;sd(t);while (t--){sd(n);rep(i, 1, n)...







