暂时咕着,慢慢补...赛时几题先放上来

A

打个表即可

#include<bits/stdc++.h>
using namespace std;
int main() {long long n;scanf("%lld",&n);if(n & 1) puts("1"); else puts("-1");
}

B

枚举端点,hash判断即可。

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
#define N 10100
#define base 13131char s[N];
ull h1[N], p[N], h2[N];
int n, ans = 0;ull gh1(int l, int r) { return h1[r] - h1[l - 1] * p[r - l + 1]; }
ull gh2(int l, int r) { return h2[l] - h2[r + 1] * p[r - l + 1]; }int main() {scanf("%s", s + 1); p[0] = 1;n = strlen(s + 1);for(int i = 1; i <= n; ++i) s[i + n] = s[i];n *= 2;for(int i = 1; i <= n; ++i) {h1[i] = h1[i - 1] * base + s[i];p[i] = p[i - 1] * base;}for(int i = n; i; i--) h2[i] = h2[i + 1] * base + s[i];for(int i = 1; i <= n; ++i) {for(int j = i; j - i + 1 <= n / 2 && j <= n; ++j) {int mid = (i + j) >> 1;if((j - i + 1) & 1 && gh1(i, mid - 1) == gh2(mid + 1, j)) ans = max(ans, j - i + 1);if(!((j - i + 1) & 1) && gh1(i, mid) == gh2(mid + 1, j)) ans = max(ans, j - i + 1);}}printf("%d\n", ans);
}

C

考虑答案长什么样子
\[ \frac{钱数大于3*n的方案数}{总方案数} \]
这个方案数dp一下就可以了。类似背包。
然后总方案数是什么呢?考虑每次一共有4种选择,相乘即\(4^n\)。
用个gcd约分即可。

#include <bits/stdc++.h>
using namespace std;
#define ll long longll f[40][130];
int n;int main() {cin >> n;f[0][0] = 1;for(int i = 1; i <= n; ++i) {for(int j = 1; j <= 4 * n; ++j) for(int v = 1; v <= 4; ++v) if(j - v >= 0) f[i][j] += f[i - 1][j - v];}ll m1 = 0;for(int i = 3 * n; i <= 4 * n; ++i) m1 += f[n][i];ll m2 = pow(4, n), g = __gcd(m1, m2);printf("%lld/%lld\n", m1 / g, m2 / g);
}

D

维护前后缀和,枚举不选点

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 5000010ll a[N], l[N], r[N];int main() {int n; cin >> n;for(int i = 1; i <= n; ++i) scanf("%lld", &a[i]), l[i] = l[i - 1] | a[i];for(int i = n; i; --i) r[i] = r[i + 1] | a[i];ll ans = 0;for(int i = 1; i <= n; ++i) {ans = max(ans, l[i - 1] | r[i + 1]);}  printf("%lld\n", ans);
}

E

倍增floyd,转移的时候相乘即可。注意细节。

#include <cstdio>
#include <algorithm>
#include <cstring>
#define ll long long
#define inf 0x3f3f3f3f
#define il inlinenamespace io {#define in(a) a = read()
#define out(a) write(a)
#define outn(a) out(a), putchar('\n')#define I_int ll
inline I_int read() {I_int x = 0, f = 1;char c = getchar();while (c < '0' || c > '9') {if (c == '-') f = -1;c = getchar();}while (c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}return x * f;
}
char F[200];
inline void write(I_int x) {if (x == 0) return (void) (putchar('0'));I_int tmp = x > 0 ? x : -x;if (x < 0) putchar('-');int cnt = 0;while (tmp > 0) {F[cnt++] = tmp % 10 + '0';tmp /= 10;}while (cnt > 0) putchar(F[--cnt]);
}
#undef I_int}
using namespace io;using namespace std;#define N 110
const ll mod = 1000000007;ll K,m,s,n;struct mat {int m[N][N];mat operator * (const mat x) const {mat c; memset(c.m, 0, sizeof(c.m));for(int k = 1; k <= n; ++k) {for(int i = 1; i <= n; ++i) {for(int j = 1; j <= n; ++j) {c.m[i][j] += m[i][k] * x.m[k][j] % mod;c.m[i][j] %= mod;}}}return c;}
}d[32];int main() {in(n);in(m);in(K);in(s); int tot = 0;for(int i = 1; i <= m; ++i) {int x, y; in(x), in(y);d[0].m[x][y]++;}for(int i = 1; (1 << i) <= K; ++i) d[i] = d[i - 1] * d[i - 1];mat ans;--K; ans = d[0];for(int i = 0; (1 << i) <= K; ++i) if((K>>i)&1) ans = ans * d[i];ll sum = 0;for(int i = 1; i <= n; ++i) {if(i == s) continue;if(ans.m[s][i]!=-1) sum += ans.m[s][i] % mod;sum %= mod;}outn(sum);
}

H

单调栈板子。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 1000100
int a[N], n, k, h[N], w[N], s[N];
ll ans = 0;int main() {scanf("%d", &n);for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);for(int i = 1; i <= n; ++i) scanf("%d", &h[i]), ans = max(ans, (ll)h[i] * a[i]);int top = 0;for(int i = 1; i <= n; ++i) {if(a[i] > h[s[top]]) {s[++top] = i, w[top] = 1;} else {ll W = 0;while(top && h[s[top]] > h[i]) {W += w[top];ans = max(ans, (ll)W * h[s[top]]);--top;}s[++top] = i; w[top] = W + a[i];}}printf("%lld\n", ans);
}

I

做一下nim,如果必败就枚举要取哪个,如果都不行那就还是必败

#include <bits/stdc++.h>
using namespace std;
#define N 100010
int a[N], s, n, k;int main() {cin >> n >> k;for(int i = 1; i <= n; ++i) {cin >> a[i]; s ^= a[i];}if(s) return puts("YES"), 0;for(int i = 1; i <= n; ++i) {int now = s ^ a[i];if(a[i] >= k && now ^ (a[i] - k)) return puts("YES"), 0;}puts("NO");
}

J

套路莫反。这里放上推导。复杂度\(O(\sqrt{n})\)
\[ \begin{aligned} &\sum \sum (i,j)^2\\ &=\sum^n d^2\sum \sum[(i,j)=d]\\ &=\sum^n d^2 \sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[(i,j)=1]\\ &=\sum^n d^2 \sum_{k=1}^{n/d}\mu(k)\frac{n}{kd}\frac{m}{kd}\\ &T = kd\\ &=\sum_{T=1}^n\frac{n}{T}\frac{m}{T}\sum_{k|T}\mu(k)(\frac{T}{k})^2\\ &id^2*\mu\\ &=F(1)=1, F(p)=p^2-1, F(p^2)=F(p)*p^2 \end{aligned} \]

\[ \begin{aligned} &\sum_{k|T}\mu(k)(\frac{T}{k})^2\\ &\mu*id^2\\ &F(1)=1\\ &F(p)=1*(p/1)^2+(-1)*(p/p)^2=p^2-1\\ &F(p^2)=1*(p^2/1)^2+(-1)*p^2+0=(p^2)^2-p^2=(p^2-1)*p^2 \end{aligned} \]

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 1000100
#define M 1000000
const ll mod = 1000000007;ll n, m;
int p[N], cnt, vis[N];
ll F[N];void init() {F[1] = 1;for(int i = 2; i <= M; ++i) {if(!vis[i]) p[++cnt] = i, F[i] = ((ll)i * i - 1ll) % mod;for(int j = 1; i * p[j] <= M && j <= cnt; ++j) {vis[i * p[j]] = 1;if(i % p[j] == 0) {F[i * p[j]] = F[i] * (p[j] * p[j] % mod) % mod;break;}F[i * p[j]] = (ll)F[i] * F[p[j]] % mod;}}for(int i = 1; i <= M; ++i) F[i] += F[i - 1], F[i] %= mod;
}int main() {init();scanf("%lld%lld", &n, &m);if(n > m) swap(n, m);ll ans = 0;for(ll l = 1, r; l <= n; l = r + 1) {r = min(n / (n / l), m / (m / l));ans = (ans + (ll)(n / l) * (m / l) % mod * ((F[r] - F[l - 1] + mod) % mod) % mod) % mod;}printf("%lld\n", (ans % mod + mod) % mod);
}

转载于:https://www.cnblogs.com/henry-1202/p/10699252.html

牛客小白月赛13 解题报告相关推荐

  1. 牛客小白月赛2 B.小马过河

    牛客小白月赛2 B.小马过河 题目链接 题目描述 E t e ˊ r e o \mathrm{Et\acute{e}reo} Eteˊreo 开始涉猎几何领域了.他现在正在研究小马喝水问题. 众所周知 ...

  2. 牛客小白月赛62 幼稚园的树

    2022.11.25 今晚闲来无事,在zhoj群中看到管理员发布的牛客小白月赛的通知,就和舍友一起参加了. 题目描述 来源:牛客网 牛牛在幼稚园做义工,幼稚园中共有 n n n 颗树,第 1 天中午时 ...

  3. 牛客小白月赛16 小石的签到题(博弈)

    牛客小白月赛16 小石的签到题 链接:https://ac.nowcoder.com/acm/contest/949/A来源:牛客网 题目描述 输入描述: 共一行,输入一个数 nnn . 输出描述: ...

  4. F.孤独(牛客小白月赛39)

    F.孤独(牛客小白月赛39) 题意: 给定一棵树,寻找一个路径,将断掉所有与这个路径上的点相连的边,使得剩下的最大连通块的大小最小 题解: 这题有点印象,感觉做过,至少这个方法肯定遇到过 设dp[u] ...

  5. 牛客小白月赛58 B(暴力)C(思维)D(dp滚动数组优化)

    牛客小白月赛58 感觉没什么意思,这场月赛出题人有点问题. B 题意:给定一定的数据填充顺序和每一个填充层的名称,只有填充满了上一层才可以填充下一层. 但是每一层又属于某一个大层,一个大层中包含了若干 ...

  6. 牛客小白月赛65个人题解A-E

    1. 牛客小白月赛65 A. 牛牛去购物 题意:给定n元,购买价格为a元的篮球和价格为b的篮球,数量不定,要使得花掉的钱最多,也就是剩余的钱数最少,求这个值 (1 <= n, a, b < ...

  7. 牛客小白月赛24 J.建设道路

    牛客小白月赛24 J.建设道路 题目链接 题目描述 牛牛国有 nnn 个城市,编号为 1-n,第 iii 个城市有一个价值 aia_iai​ ,牛国的国王牛阔落特别喜欢在牛牛国旅游,并且他不想每次旅游 ...

  8. 牛客小白月赛4 D.郊区春游

    牛客小白月赛4 D.郊区春游 题目链接 题目描述 今天春天铁子的班上组织了一场春游,在铁子的城市里有 nnn 个郊区和 mmm 条无向道路,第 iii 条道路连接郊区 AiA_iAi​ 和 BiB_i ...

  9. 牛客小白月赛25 C.白魔法师

    牛客小白月赛25 C.白魔法师 题目链接 题目描述 你是一个白魔法师. 现在你拿到了一棵树,树上有 个点,每个点被染成了黑色或白色. 你可以释放一次魔法,将某个点染成白色.(该点不一定是黑色点,也可以 ...

最新文章

  1. MySQL—05—MySQL如何处理SQL语句;MySQL数据库存储引擎介绍;
  2. python正则_Python基础12之Python正则
  3. Redis缓存击穿和缓存雪崩、缓存穿透以及对应的解决方案
  4. html css position,[CSS]CSS Position 详解
  5. sigprocmask()函数实例详解,设置信号规定时间堵塞,取消信号堵塞
  6. 如何通过JMX远程监控Solr?
  7. 电脑更新重启后黑屏_手机黑屏了,重启后万事大吉?那可就错了!
  8. BizTalk Server 2010 + SQL Server 2008 R2 - 通过集成创造更大价值 [ 上篇 ]
  9. html代码如何查看视频,Web前端
  10. 洛谷——P1706 全排列问题
  11. centos7挂载nas存储_NAS同步百度云全攻略!一篇打尽win虚拟机、黑群、Docker操作演示...
  12. win10 IE内核浏览器不能上网的问题
  13. android 仿QQ相册
  14. 闭环控制步进电机对比传统开环控制的优点
  15. 大一微积分笔记整理_大一高数如何做笔记?
  16. Note For Linux By Jes(2)-Linux文件与目录管理
  17. Miui13-mi10s刷twrp和Magisk
  18. 思科前员工为报复恶意删除400多台虚拟机,公司损失超1600万
  19. 【STM32】ADC程序示例
  20. 输出某区间内的水仙花数

热门文章

  1. php方法 隐藏手机号中间四位
  2. apk反编译、smali修改、回编译笔记
  3. 通用权限管理平台--数据模型定义
  4. 统一建模语言UML轻松入门之用例
  5. LeetCode(944)——删列造序(JavaScript)
  6. JavaScript学习(九十三)—选择排序和冒泡排序
  7. 数据库原理—数据库基础(二)
  8. 使用多线程进行网图下载
  9. 江苏地区BA还真是慢得很
  10. 单位人勾心斗角,我是老实人该怎么办?