为了督促自己补题!以后都开博客记录!

本次比赛:吉首大学第九届"新星杯"大学生程序设计大赛(重现赛)
时间:2020/1/5

共做出8题,最后卡在了一道博弈题。

A:比赛的时侯看了下题目,没看懂,然后跳了。其实也很简单,意思就是,如果这次找到了,那么下一次的起点就变成了这个点,下一次我们直接减去它就可以了。

///                 .-~~~~~~~~~-._       _.-~~~~~~~~~-.
///             __.'              ~.   .~              `.__
///           .'//                  \./                  \\`.
///        .'//                     |                     \\`.
///       .'// .-~"""""""~~~~-._     |     _,-~~~~"""""""~-. \\`.
///     .'//.-"                 `-.  |  .-'                 "-.\\`.
///   .'//______.============-..   \ | /   ..-============.______\\`.
/// .'______________________________\|/______________________________`.
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const double pi = acos(-1);
namespace {template <typename T> inline void read(T &x) {x = 0; T f = 1;char s = getchar();for(; !isdigit(s); s = getchar()) if(s == '-') f = -1;for(;  isdigit(s); s = getchar()) x = (x << 3) + (x << 1) + (s ^ 48);x *= f;}
}
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define _for(n,m,i) for (register int i = (n); i < (m); ++i)
#define _rep(n,m,i) for (register int i = (n); i <= (m); ++i)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define lowbit(x) x & (-x)
#define pii pair<int,int>
#define fi first
#define se second
set<int> se[13];
int main() {int x, y, z, q, a;read(x); read(y); read(z);se[0].insert(0);for(int i = 1; i <= 12; i++) {for(auto it : se[i-1]) {se[i].insert(it + x);se[i].insert(it - x);se[i].insert(it + y);se[i].insert(it - y);se[i].insert(it + z);se[i].insert(it - z);}}int st = 0;read(q);while(q--) {read(a);a = a - st;if(se[12].find(a) != se[12].end()) {puts("YES");st = abs(a);}else {puts("NO");st = 0;}}
}

B: 签到题,不谈。

C:写的时侯看错了题目, wa了几发才发现读错了题目。实际上只会移动一次。然后打标记在判断即可

D:二分答案即可

E:签到题

F:比赛的时侯没有看0.0,n很大,所有肯定有点规律,n > 178之后 模数就变成0了,发现这个就很简单了

///                 .-~~~~~~~~~-._       _.-~~~~~~~~~-.
///             __.'              ~.   .~              `.__
///           .'//                  \./                  \\`.
///        .'//                     |                     \\`.
///       .'// .-~"""""""~~~~-._     |     _,-~~~~"""""""~-. \\`.
///     .'//.-"                 `-.  |  .-'                 "-.\\`.
///   .'//______.============-..   \ | /   ..-============.______\\`.
/// .'______________________________\|/______________________________`.
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const double pi = acos(-1);
namespace {template <typename T> inline void read(T &x) {x = 0; T f = 1;char s = getchar();for(; !isdigit(s); s = getchar()) if(s == '-') f = -1;for(;  isdigit(s); s = getchar()) x = (x << 3) + (x << 1) + (s ^ 48);x *= f;}
}
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define _for(n,m,i) for (register int i = (n); i < (m); ++i)
#define _rep(n,m,i) for (register int i = (n); i <= (m); ++i)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define lowbit(x) x & (-x)
#define pii pair<int,int>
#define fi first
#define se second
const LL Mod = 3777105087;
LL arr[200];
int main() { LL n, x, y;arr[1] = 1;_rep(2, 178, i) arr[i] = (arr[i-1] * i) % Mod;while(cin >> n >> x >> y) { if(n >= 178) n = 178;LL ret = 0;_rep(2, n, i) {ret = (ret + arr[i]) % Mod;}if(y) _rep(1, x, i) ret = ret * 2 % Mod;ret = (ret + 1) % Mod;cout << ret << "\n";}
}

G: DP,是我做不出来的题。。在题解和AC代码的帮助下把这题补了;

一个显然的结论,一个数的位数大的一定大于位数小的。所以难求的就是等于的情况。dp[i][j][k],1 <= i <=n, 1 <= j <= m, 0 <= k <= 1;
k为0 时代表 一个串的第i个匹配到另一个串的第j个时,大于它的个数
k为1时代表 一个串的第i个匹配到另一个串的第j个时,等于它的个数
然后发现每一个状态都是从上一个状态转移过来的,所以空间是可以优化的,可以用滚动数组。然后再发现只能从上一个状态中长度较小的转移到较大的,所以实际上逆序一下就可以了;
转移方程:
dp[j][0] += dp[j-1][0] 大于的到这里还是大于
dp[j][1] += dp[j-1][1] s[i] == t[j]; 相等的到这里还是相等
dp[j][0] += dp[j-1][1] s[i] > t[j];现在相等的也变成大于的了

最后dp[m][0] 就是答案。但是这得m >= n 的时侯。因为我们少算了一部分,当n >= m 时,长度为 m + 1 到 n 的都是一定大于的,但是前面统计不到。所以还得DP一次长度为 i 的数字的个数,不能有前导0;

dp[i][j] 代表前i个中,长度为 j 的有多少个。
转移方程:
dp[i][j] += dp[i-1][j-1]
dp[i][1] += s[i] != ‘0’;

本着优化的精神 我们发现和上面一样的,逆序一下就可以变成一维。然后再把大于m + 1的部分加到答案中就可以。

#include<bits/stdc++.h>
using namespace std;
namespace {template <typename T> inline void read(T &x) {x = 0; T f = 1;char s = getchar();for(; !isdigit(s); s = getchar()) if(s == '-') f = -1;for(;  isdigit(s); s = getchar()) x = (x << 3) + (x << 1) + (s ^ 48);x *= f;}
}
#define _rep(n,m,i) for (register int i = (n); i <= (m); ++i)
const int N = 3e3+5;
const int Mod = 998244353;
int dp[N][2], dp1[N];
char s[N], t[N];
inline int min(int a, int b) {return a < b ? a : b;
}
inline void Mov(int &a, int b) {a += b;if(a > Mod) a -= Mod;
}
int main() {int k;read(k);while(k--) {memset(dp, 0, sizeof dp);memset(dp1, 0, sizeof dp1);int n, m;read(n); read(m);scanf("%s %s", s +  1, t + 1);dp[0][1] = 1;_rep(1, n, i) for(int j = min(i, m); j >= 1; --j) {if(s[i] == t[j]) Mov(dp[j][1], dp[j-1][1]);if(s[i] > t[j]) Mov(dp[j][0], dp[j-1][1]);Mov(dp[j][0], dp[j-1][0]);}_rep(1, n, i) {for(int j = i; j >= 1; --j) {if(j == 1) dp1[1] += s[i] != '0';else Mov(dp1[j], dp1[j-1]);}}_rep(m+1, n, i) Mov(dp[m][0], dp1[i]);printf("%d\n", dp[m][0]);}
}

H:模拟即可

I:二进制中1的数量

J:思维题,找最长的连续递增子序列,n减之即可

K:并查集

L:

M:
刚开始写了下深搜,推了个假结论。还是以前没有搞清楚SG函数的作用。其实就是道SG函数的裸题。SG(n)为真即真。

///                 .-~~~~~~~~~-._       _.-~~~~~~~~~-.
///             __.'              ~.   .~              `.__
///           .'//                  \./                  \\`.
///        .'//                     |                     \\`.
///       .'// .-~"""""""~~~~-._     |     _,-~~~~"""""""~-. \\`.
///     .'//.-"                 `-.  |  .-'                 "-.\\`.
///   .'//______.============-..   \ | /   ..-============.______\\`.
/// .'______________________________\|/______________________________`.
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const double pi = acos(-1);
namespace {template <typename T> inline void read(T &x) {x = 0; T f = 1;char s = getchar();for(; !isdigit(s); s = getchar()) if(s == '-') f = -1;for(;  isdigit(s); s = getchar()) x = (x << 3) + (x << 1) + (s ^ 48);x *= f;}
}
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define _for(n,m,i) for (register int i = (n); i < (m); ++i)
#define _rep(n,m,i) for (register int i = (n); i <= (m); ++i)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define lowbit(x) x & (-x)
#define pii pair<int,int>
#define fi first
#define se second
const int N = 1e3+5;
int Sg[N], vis[N], a[N];
int n, m;
bool SG(int n) {for(int i = 1; i <= n; i++) {memset(vis, 0, sizeof vis);for(int j = 1; j <= m; j++) {if(i - a[j] >= 0) vis[Sg[i - a[j]]] = 1;}for(int j = 0; j <= n; j++) {if(!vis[j]) {Sg[i] = j;break;}}}return Sg[n];
}
int main() {read(n); read(m);for(int i = 1; i <= m; i++) read(a[i]);if(SG(n)) puts("Y");else puts("N");
}

补题:吉首大学第九届"新星杯"大学生程序设计大赛 ---还差一题.jpg相关推荐

  1. 吉首大学第九届"新星杯"大学生程序设计大赛 C.始战

    吉首大学第九届"新星杯"大学生程序设计大赛 C.始战 题目描述 天地不仁,以万物为刍狗. 东汉末年,群雄并起.十八路诸侯各自为战,为得一地一城,大肆征战,民众死伤无数. 诸葛亮密如神鬼,疾如风雷.进不 ...

  2. 吉首大学第九届"新星杯"大学生程序设计大赛 J.小阳排队

    吉首大学第九届"新星杯"大学生程序设计大赛 J.小阳排队 题目描述 小阳想要买个东西,然后就去了商店,发现进商店需要排队(生意太火爆!),然后就开始漫长的等待,他觉得自己 太无聊,便开始思考一个问题, ...

  3. 吉首大学第九届"新星杯"大学生程序设计大赛 M.来来来 比比咱谁更聪明

    吉首大学第九届"新星杯"大学生程序设计大赛 M.来来来 比比咱谁更聪明 题目描述 小j和小k一起玩一个简单的小游戏,有一个容量为n的瓶子,此外还有m个容量不等杯子,他们用杯子装满水轮流往瓶子中倒水,如 ...

  4. 吉首大学第九届"新星杯"大学生程序设计大赛(重现赛)(回顾补题)

    这次比赛6/13,可惜可惜,差一题就达到既定目标,自身思想出了问题,没

  5. 【题解】吉首大学第九届"新星杯"大学生程序设计大赛(重现赛)

    文章目录 B - Y 老师的井字窗(签到) C - 始战(思维) D - 秒速五厘米(二分) E - 冬天怎么能够没有辣条(签到) H - 小李堆积木(模拟) I - Y 老师的乐高小镇(数学) J ...

  6. php 大数相加,吉首大学第九届"新星杯"大学生程序设计大赛(示例代码)

    A: 直接打表所有可以到达的点就可以了 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 # ...

  7. 吉首大学第九届"新星杯"大学生程序设计大赛(重现赛)

    A 被诅咒的WWT 题目描述 WWT因为过于可爱被一个邪恶的巫师施了魔咒,将WWT变成了一维的,并将他放到了一根坐标轴的坐标原点上,巫师的魔咒极其强大,WWT需要在坐标轴上移动十二步,且每一步只能移动 ...

  8. 2017年“华信智原杯”安徽省大学生程序设计大赛C题-刷票

    C. 刷票 题目描述: 有一个选秀比赛,节目组按照观众的投票情况决定选手的去留.为了给旗下 艺人造势,A 公司收买了一批水军来刷票.已知现在有 n 名选手同台竞争,依次 编号 1-n,A 公司的艺人编 ...

  9. 吉首大学第七届“新星杯”程序设计大赛---补题概况

    吉首大学第七届"新星杯"程序设计大赛---补题http://120.78.162.102/contest.php?cid=1332 先来发图片...(唉...AC九道,就A不动了, ...

最新文章

  1. 数据导出Excel表格
  2. AD学习笔记----PCB设计
  3. rust房子 如何拆除_“一户多宅”将陆续清查!违规如何处理?
  4. JQuery获取元素本身HTML
  5. linux添加文件后无法启动,linux安装后grub无法启动
  6. 彻底解决显示Opencv中Mat图像到Mfc窗口问题
  7. 漫谈数据挖掘从入门到进阶
  8. php curl 关闭tcp连接,BASH CURL:顺序运行时,请勿关闭请求之间的连接
  9. 什么是机器学习?有哪些分类?到底有什么用?终于有人讲明白了
  10. C#LeetCode刷题之#674-最长连续递增序列( Longest Continuous Increasing Subsequence)
  11. PDF文件能编辑吗,怎么删除PDF文档中的空白页
  12. C# 连接mysql 报错:SSL Connection error
  13. 双边滤波器和高斯滤波器
  14. 安装打印机时出现无法安装,打印处理器不存在
  15. word横向网格线设置在哪里_word表格中横向网格线
  16. FFmpeg之音频封装格式、音频编解码器
  17. 用文字总结出计算机组装步骤,项目教学法在《计算机组装与维护》中的运用与反思(杜燕)...
  18. PyCharm下载及安装教程(Windows)
  19. layui表格里面加载照片
  20. 以下名字 不能作为c语言标识符的是,(完整版)《C语言程序设计》复习参考答案...

热门文章

  1. ubuntu安装有道
  2. IT服务模式变迁影射新旧商业时代交替
  3. Altium Designer如何实现圆弧布线
  4. 亚马逊 ai 解雇_绿色是使用AI的新的黑色节约型亚马逊雨林
  5. Ktor: Kotlin Web后端框架 快速开始入门
  6. [转] 理解各种熵最大熵模型
  7. 《亲密关系》——[美] 罗兰·米勒 (Rowland S. Miller)
  8. NUIST_OJ P1042手机短号
  9. CCF-CSP 202012-5 星际旅行 80分
  10. 5G赋能行业园区数字化转型技术白皮书