
一些练习
pruuu____d
热情地输入;勇敢地输出
展开
-
最佳编码
#include<queue>#include<xstring>#include<iostream>#include<cstring>#include<stdio.h>using namespace std;int n, m, ans;int num[30];string str;int bfs() { int sum = 0; priority_queue <int, vector<int>,.原创 2022-02-28 19:40:58 · 212 阅读 · 0 评论 -
救救dingba (和天使差不多)
先摆错误代码#include<iostream>#include<queue>using namespace std;int n, m,ans;char map[201][201];int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};struct state { int x; int y; int ti; friend bool operator<(state s1,state s2) { ret原创 2022-02-28 16:50:20 · 345 阅读 · 0 评论 -
s-nim(一道很麻烦的题)
首先会输入一个n 代表有n种抽牌方式,紧接着n个数字输入;然后是m表示有m组数据需要判断在这n种抽牌方式下第一个抽牌的人是输或是赢 最后输出m个L/W(这里不太会处理,直接用数组存了)最后输入0表示输入结束需要注意的就是需要将n种抽牌方式进行从小到大的排序,不然sg函数中的break要改为continue,还有就是sg函数的写法需要熟练#include<iostream>#include<cstring>#include<algorithm>u原创 2022-02-26 21:13:34 · 314 阅读 · 0 评论 -
Public Sale (输出获胜方式)
Problem Description拍卖的规则是这样的:刚开始底价为0,两个人轮流开始加价,不过每次加价的幅度要在1~N之间,当价格大于或等于田地的成本价 M 时,主办方就把这块田地卖给这次叫价的人。由于Lele字典序比Yueyue靠前,所以每次都是由Lele先开始加价,请问,第一次加价的时候,Lele要出多少才能保证自己买得到这块地呢?Input本题目包含多组测试,请处理到文件结束(EOF)。每组测试占一行。每组测试包含两个整数M和N(含义见题目描述,0<N,M<1100)原创 2022-02-26 20:17:55 · 151 阅读 · 0 评论 -
Being a Good Boy in Spring Festival(nim博弈的取胜方式数)一些超详细的推导
m堆牌,每次只能选择一堆牌抽取任意张(所以sg(n)=n)。用s储存所有sg函数的异或值。根据题意可以知道是如果选择a【i】(第i堆,牌数为a【i】)最多可以抽a[i]张(废话),怎么样可以取胜呢——令抽取了x张牌后的nim和等于0。也就是说,s^a[i]^(a[i]-x)==0; (s^a[i]等于除了a[i]之外所以数的异或值)又因为一个数和它本身求异或值的话也就等于0,所以可以得出s^a[i]==a[i]-x (抽任意张牌,x肯定大于0),又因为x到底是几我们不确定,但是肯定大于零,所以可以把判断原创 2022-02-26 13:20:10 · 753 阅读 · 0 评论 -
二分匹配 棋盘游戏
大意就是在棋子只能放在给定的格子之中,并且在某一格子(x,y)放了棋子后x行,y列不能再放棋子。重要点就是如果某一点不能放棋的话,可以放置棋子的最大数量就会减少。然后要求第n块棋盘有几个重要点,最多可以放几个棋子然后比较不同的地方就是求重要点。要用已经求出的最大匹配数 rd 与去掉某点之后的最大匹配数(将map[i][j]=0(屏蔽该点之后再调用函数hugary()))最后不要忘了令map[i][j]=1;进行复原操作。#include<iostream>#include<原创 2022-02-25 20:11:45 · 3007 阅读 · 0 评论 -
过山车 二分匹配的最大匹配
用了匈牙利算法,简单来说就是能不能把新的左点和右点连线#include<iostream>#include<cstring>using namespace std;int an, bn, k,a,b,ans;int map[501][501],linker[501]; bool vis[501];bool dfs(int a) { for (int b = 1; b <= bn; b++) { if (map[a][b] && !vis[原创 2022-02-24 16:10:04 · 94 阅读 · 0 评论 -
oil deposits (dfs)
题意:有油的地块和邻近八个方向的有油地块算作1片油田。看到题之后又是正常懵逼。用x,y的位置表示每个点的状态,然后如果符合条件就将地块标记为不符合条件的地块就好了。然后在怎么找符合条件的地块卡了一下。(其实遍历就好)两个for循环一上去,符合条件就dfs 然后计数君++#include<iostream>#include<cstring>#include<stdio.h>using namespace std;int Move[8][2] = {原创 2022-02-23 18:39:03 · 80 阅读 · 0 评论 -
手机的诱惑
#include<iostream>#include<cstring>using namespace std;int Move[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };char map[9][9];int N, M, T; bool judge;int sx, sy, ex, ey;bool in(int a, int b) { return a > 0 && a <= N && b &g.原创 2022-02-23 16:26:49 · 581 阅读 · 0 评论 -
dfs 求全排列
关于n=3,求全排列的流程图原创 2022-02-23 14:37:23 · 338 阅读 · 0 评论 -
胜利大逃亡
又卡了一会原本想用优先队列加bfs的(改一改上一题的那个模板)反而还一直超出内存,因为没有用vis标记剪枝。又想了一会,为什么这个不用呢,因为他要求的时间是每一次行动所需都相同的,不像上个rescue里面有守卫需要2点行动力,所以就是正常用bfs就好了。然后是三维数组map[a][b][c],a表示层数(或者说是深度,高度)b表示行,c表示列这样。一开始想都没想,Move用了三维数组表示移动的情况,但是其实没必要,(浪费了好长时间)。#include<iostream>#includ原创 2022-02-22 22:09:44 · 103 阅读 · 0 评论 -
rescue 救救天使
关键点:优先队列() 以及mintime数组存最小时间/vis标记原创 2022-02-22 18:32:23 · 120 阅读 · 0 评论 -
knight moves
整整一天!一开始想着用最基础的bfs(单向)并且最暴力的if()穷举8种走法,然后一直报错(还查不出来哪里错误了。)然后用循环 直接ac舒服了原创 2022-02-15 20:48:53 · 512 阅读 · 0 评论