博客更新记录
2024-10-25
上传文章:2024ICPC昆明邀请赛
2024-09-18
上传文章:2024JXCPC
2024-07-26
上传文章:2024SXCPC
2024-07-24
上传文章:2024SCCPC
2024-07-18
上传文章:文件管理系统的搭建
2024-07-01
更新文章:关于linux(Ubuntu),调整了一些文章的优先级以及标签分类等
2024-06-29
更新文章:关于Ubuntu->关于linux(Ubuntu)
2024-04-07
更新文章:18thZJCPC,19thZJCPC
2024-04-06
上传文章:17thZJCPC,18thZJCPC
2024-03-31
上传文章:2024年度第五届全国大学生算法设计与编程挑战赛(春季赛)更新文章:XCPC模板
2024-03-26
上传文章:2022SHCPC,2023JSCPC;更新文章:hexo-github个人网站开发;添加文章置顶功能
2024-03-16
上传文章:13thSDCPC,整除分块
2024-03-11
更新文章:XCPC模板
2024-03-04
上传文章:【LG ...
XCPC模板
DSU12345678910111213141516171819202122232425262728#define N 200005struct DSU { int n; vector<int> par, h; explicit DSU(int _n) : n(_n + 1), par(_n + 1), h(_n + 1) { for (int i = 1; i <= _n; ++i)par[i] = i; }; int find(int x) { return par[x] != x ? par[x] = find(par[x]) : par[x]; } void unite(int x, int y) { x = find(x); y = find(y); if (x == y)return; if (h[x] == h[y]) { h[x]++; ...
trick
本文用来记录一些做题时看到的小技巧以及踩过的坑
技巧
bool可以直接作为参数传递:1234567891011bool f(int i,int j,int m,int n,int next){ if(next>=8){ s[i][j]=1; return 1; } if(a[i+m][j+n]==k[next]) if(f(i+m,j+n,m,n,next+1)){ s[i][j]=1; return 1; } return 0;
清除缓冲区printf(“字符串”);后面加fflush(stdout);cout使用endl。
bool类型可以用bitset代替C++ bitset用法_牛客博客
递归可以实现倒序十进制转二进制输出123456 int r; r = num%2; if(num>=2) toBin(num/2); if(r) cout<<1; else cout<<0;}使用递归解决了倒取余数的问题而递 ...
2024ICPC昆明邀请赛
题面:
B - Gold Medal签到题,很显然先分配那些补较少人数就能产生牌子的比赛,那么补全了之后如果还有剩的直接除k向下取整就行。
12345678910111213void solve() { int n,k; cin>>n>>k; vector<int> a(n); int ans = 0; for(int i = 0;i<n;++i) cin>>a[i],ans += a[i] / k,a[i] %= k; int m,p = 0; cin>>m; sort(all(a),greater()); while(p < n && m - (k - a[p]) >= 0) ans++,m -= (k - a[p++]); ans += m / k; cout<<ans<<endl;}
G - Be Positive观察样例可以发现当n == 4 || n == 1的时候归零了。
首先不难看出0,1,2,3;4,5, ...
2024JXCPC
题面:
A - Maliang Learning Painting签到题问你a + b + c等于多少
C - Liar n 个人每人有一个数,分别宣称自己的数为 a1, a2, . . . , an。已知所有人的 数的和为 s,求至多有多少人没撒谎。
显然如果$ \sum a_i == s $那么最优的是每个人都说了真话答案是n,如果不相等那就贪心的认为只有一个人说了谎其他人都没说谎,答案是n-1。
G - Multiples of 5 给出一个 11 进制的数,问这个数是否是 5 的倍数。数的长度比较长,以 二元组 (x, y) 的形式逐个给出,表示接下来有 x 个 y 将要拼接到右侧。
每一位拆开来看,对于长度为n的数可以理解为
$\sum a_i*(11)^{i-1} $
因为任意个11相乘模5等于1,即
$ (11)^{n}\%5 = 1 $即
$ (11)^n\equiv 1\ (mod\ 5) $
所以原式可以化为
$ \sum a_i*(11)^{i-1} \%5=\sum a_i\%5 $
所以求和取模即可
123456789101 ...
2024SXCPC
题面:
F - Try a try, AC is OK 得分就是单次提交所能获得的最高分。
1234567891011void solve(){ int n; cin>>n; int maxx=INT_MIN; for(int i=1;i<=n;++i){ int tmp; cin>>tmp; maxx=max(tmp,maxx); } cout<<maxx<<endl;}
A - chmod模拟即可。
1234567891011121314void solve() { string x, s = "xwr"; cin >> x; for (auto i : x) { int n = i - '0'; string t; t.resize(3); for (int i = 0; i < 3; ++i) ...
2024SCCPC
题面:
有点可惜要是先看的A题说不定就过金牌线了。
L Beef Tripe in Soup Pot?阅读理解题,我和另一个队友当时没看到有中文题面看了半天,就是在说有n种物品,每个有四个信息,第一个和第二个信息表示第一和第二个种类对应的值表示代价,第三个和第四个是这种物品的是属于第一种类还是第二种类。问你个每个物品划分完之后的最小代价。就是排序。
123456789101112131415161718192021void solve() { int n; vector<int> a,p1,p2; cin>>n; for(int i = 0,x,y,u,v;i<n;++i){ cin>>x>>y>>u>>v; if(u && v){ if(x > y) a.push_back(y),p2.push_back(i); else a.push_back(x),p1.push_back(i); }else& ...
文件管理系统的搭建
先搓了个本地的,等什么时候买了服务器弄个云端的玩玩。用的是free-fs。装完mysql和navicat之后,配置好环境等,打开服务器,然后把它连到navicat(新建连接,选MySQL,起个名称,以下以名称local为例,主机选本地即localhost,端口用默认的3306,用户名和密码自定义,以下以root和123456为例)。
然后右键local连接,选择新建数据库,将数据库名称改为free-fs,字符集选择utf8mb4,排序规则选utf8mb4_general_ci。最后在这个数据库上新建一个查询,打开用IDEA打开项目,找到sql文件,里面有一个free-fs.sql脚本。复制这个文件的内容到这个查询,选择运行。这样就创建好了数据库。然后是配置文件的修改部分:先找到配置文件,在fs-admin里面,具体位置是../src/main/resources/application.yml,可以配置端口啥的。必须要改的地方就一两处:1.spring里的部分,profiles里的active改成dev,表示用的是dev这个配置。
1234......profiles: active ...
18thZJCPC
A - League of Legends格莱美喜欢玩世界著名的英雄联盟游戏。在最新版本中,有一个特殊的规则供玩家选择玩。根据此规则, 10 玩家将被分为红队和蓝队。每支队伍由 5 名玩家组成,每个玩家都有一个初始生命值。如果一支队伍中的所有 5 玩家均没有正HP值,则该队伍将输掉这场比赛。每回合,队伍可以选择一名球员并减少他的生命值 1。蓝队首先开始。现在格莱美想知道两支球队是否都按照最优策略比赛,哪支球队会赢得比赛。枚举,比大小,平局蓝队赢
C - Cube给你三维空间中的八个点,请检查它们是否可以组成一个立方体。立方体是正六面体,由六个正方形面包围,每个顶点有三个相交点。T≤100组数据。两两枚举点对之间的距离,根据对角线,体对角线,面对角线,棱的长度和数量关系判断。
123456789101112131415161718192021222324252627282930313233343536373839404142#include <bits/stdc++.h>using namespace std;int t,x[8],y[8],z[8];int main() ...
17thZJCPC
题面:
K - Killing the Brute-force 给定标程和暴力在 n = 1, 2, . . . , m 时的运行时间,找到最小 的 n 使得三倍标程时限可以卡掉暴力 。m很小没什么好讲的就一个遍历找到最小的即可
1234567891011void solve(){ int m; cin>>m; vector<int> a(m),b(m); for(int i = 0;i<m;++i) cin>>a[i]; for(int i = 0;i<m;++i) cin>>b[i]; for(int i = 0;i<m;++i) if(a[i]*3<b[i]) return cout<<i + 1<<endl,void(); cout<<-1<<endl;}
A - AD 2020 给一个日期的区间,问有多少个日期含有子串“202”的。2000.01.01 ≤ 日期 ≤ 9999.12.31参考题解给的是直接 ...