(一)项目基础信息和说明
所需要的Go语言基础
这并不是一个完全零基础的Go语言Web项目教程,你需要对包括但不限于gin,gorm等常用框架有一定的了解。此外,如果你之前有过其它语言的Web开发经验,那么我相信你也可以很快学会这些内容。如果没有这些基础,你可以跟着本教程做下去,我们会在每一部分的练习中写上所需要的基础,你可以自己去找资料学习,也可以看博客中的教程(如果有的话),总而言之,只要有耐心,完成这个项目并不会太困难,而且你会学习到很多😃。
说明
在学习的过程中我们会遇到陌生的知识和内容,第一遍使用时不需要了解这些内容的细节,在适当的时候不求甚解可以让我们的学习进度更加流畅
完成这些部分的时候,我会按照结构由外而内的讲解编码。也就是写下这份代码时可能还有一些函数没有完成,如果你不习惯这种顺序,可以先翻到下面完成这些函数
每个代码块的前面都会附上代码所在的包和文件的位置,请按照这个位置去建立文件,所有的文件说明默认都是从根目录开始的。
对于代码的讲解,我会偏向于这个工具在这个项目中是如何使用的,而不会从零开始去讲解一个包怎么使用,如果你还完全不会,那么建议先自学一下基础内容
这是Go技术论坛上的一 ...
AtCoder Beginner Contest 248
AtCoder Beginner Contest 248
下载PDF,获得别样的观看体验
A - Lacked Number
题意:
给出10个数字,输出0~9中未出现的那个数字。
思路:
统计数字出现情况即可。
时间复杂度:
O(1)O(1)O(1)
AC代码:
1234567891011121314151617#include<bits/stdc++.h>typedef long long ll;const int N = 2e5+10,M = 2e5+10,INF = 0x3f3f3f3f,mod = 32768;int main(){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); int cnt[10] = {0}; std::string s; std::cin>>s; for(auto c : s)cnt[c-'0']++; for(int i = 0 ; i &l ...
Codeforces Round 781 (Div. 2)
A. GCD vs LCM
题意:
给定数n,找到a,b,c,d四个数满足下列条件:
1.a+b+c+d=na+b+c+d=na+b+c+d=n
2.gcd(a,b)=lcm(c,d)gcd(a,b)=lcm(c,d)gcd(a,b)=lcm(c,d)
思路:
取特殊情况,令gcd(a,b)=1gcd(a,b)=1gcd(a,b)=1即可。
即构造a=1,b=n−3,c=1,d=1a=1,b=n-3,c=1,d=1a=1,b=n−3,c=1,d=1
时间复杂度:
所需时间与输入规模无关:
O(1)O(1)O(1)
AC代码:
123456789101112131415161718192021222324#include<bits/stdc++.h>const int N = 2e2+10,M = 2e5+10,INF = 0x3f3f3f3f;void solve(){ int n; std::cin>>n; std::cout<<1<<' '<<n-3& ...
Codeforces Round 780 (Div. 3)
A. Vasya and Coins
题意:
小明有aaa枚1元硬币和bbb枚2元硬币,输出小明无法支付的最小金额。
思路:
没有1元硬币:
答案为1
有1元硬币:
答案为a+2∗b+1a+2*b+1a+2∗b+1
时间复杂度:
O(1)O(1)O(1)
AC代码:
12345678910111213141516171819202122232425262728293031在这里插入代码片#include<bits/stdc++.h>typedef long long ll;const int N = 20,M = 2e4+10,INF = 0x3f3f3f3f,mod = 1e9+7;void solve(){ int a,b; std::cin>>a>>b; if(!a) { std::cout<<1<<'\n'; return; } std::cout<<a+b*2+ ...
Codeforces Round 779 (Div. 2)(Permutationforces)
A. Marin and Photoshoot
题意:
给定一个由0和1组成的序列,现在可以往这个序列中添加1,是的这个序列满足如下要求:
对于任意长度大于等于2的区间,要求这个区间中1的个数大于等于0的个数。
思路:
添加1,使得序列中不存在如下情况:
00或者010
即保证两个0之间的距离大于等于2。
时间复杂度:
O(n)O(n)O(n)
AC代码:
12345678910111213141516171819202122232425262728293031323334353637383940#include<bits/stdc++.h>typedef long long ll;const int N = 2e5+10,M = N * 4,INF = 0x3f3f3f3f,mod = 1e9+7;void solve(){ int n; std::string s; std::cin>>n>>s; int res = 0,last = -1; for(int i = 0 ; i < ...
CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes)
A. Good Pairs
题意:
给定一个长度为n的序列:
a1,a2,…,an−1,ana_{1},a_{2},\dots,a_{n-1},a_{n}a1,a2,…,an−1,an
现在要找到一对下标(i,j)(i,j)(i,j)满足:
∣ai−ak∣+∣aj−ak∣=∣ai−aj∣|a_{i}-a_{k}|+|a_{j}-a_{k}|=|a_{i}-a_{j}|∣ai−ak∣+∣aj−ak∣=∣ai−aj∣
对所有的k(1≤k≤n)k(1\leq k\leq n)k(1≤k≤n)成立
思路:
显然只要ai和aja_{i}和a_{j}ai和aj是最大值是最小值即可。
时间复杂度:
O(n)O(n)O(n)
AC代码:
1234567891011121314151617181920212223242526272829#include<bits/stdc++.h>typedef long long ll;const int N = 2e5+10,M = N * 2,INF = 0x3f3f3f3f,mod = 1e9+7;int a ...
AtCoder Beginner Contest 245
A - Good morning
题意:
语法题:
给定两个起床时间。
若第一个早于等于第二个,输出Takahashi{\color{Red}Takahashi }Takahashi,
反之输出Aoki{\color{Red}Aoki}Aoki。
思路:
见代码
时间复杂度:
O(1)O(1)O(1)
AC代码:
12345678910111213141516171819#include<bits/stdc++.h>typedef long long ll;const int N = 1e2+10,M = N * 2,INF = 0x3f3f3f3f,mod = 1e9+7;int main(){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); int a,b,c,d; std::cin>>a>>b>>c>>d; if(a*60+b<=c*60+ ...
AtCoder Beginner Contest 246
A - Four Points
题意:
给出三个点,找到一个点,让这4个点组成一个矩形
思路:
分别找到横纵坐标中只有一个的值。
时间复杂度:
O(1)O(1)O(1)
AC代码:
123456789101112131415161718192021#include<bits/stdc++.h>typedef long long ll;const int N = 1e2+5,M = 2e4+10,INF = 0x3f3f3f3f,mod = 1e9+7;int main(){// std::ios::sync_with_stdio(false);// std::cin.tie(nullptr);// std::cout.tie(nullptr); int x,y,ans_x = 0,ans_y = 0; for(int i = 1 ; i <= 3 ; i++) { std::cin>>x>>y; ans_x ^= x,ans_y ^= y; ...