服务器操作系统:ubuntu22.04(建议和我使用一样的)
先执行sudo apt update 更新
shsudo apt install -y docker-compose
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://98t8vkfg.mirror.aliyuncs.com",
"https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://your_preferred_mirror",
"https://dockerhub.icu",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
在项目启动之前,还需要修改一个配置文件。
shsudo vim /etc/default/grub
找到 GRUB_CMDLINE_LINUX_DEFAULT 换成:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=0 cgroup_enable=memory swapaccount=1"
然后保存,重启
shsudo update-grub sudo reboot
当前在 dom 目录下
输入自己的密码
MYSQL_ROOT_PASSWORD=@xxx114514 MYSQL_PASSWORD=xxx114514
JUDGEDAEMON_PASSWORD=xxx114514
ymlversion: "3.9"
services:
dj-mariadb:
container_name: dj-mariadb
image: mariadb:10.5
restart: unless-stopped
ports:
- "13306:3306"
volumes:
- ./database:/var/lib/mysql
env_file: database.secret
environment:
- MYSQL_USER=domjudge
- MYSQL_DATABASE=domjudge
- CONTAINER_TIMEZONE=Asia/Shanghai
command: --max-connections=1024 --max-allowed-packet=1G --innodb-log-file-size=512M
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "--password=$$MYSQL_ROOT_PASSWORD"]
start_period: 30s
interval: 10s
timeout: 5s
retries: 10
domserver:
container_name: domserver
image: domjudge/domserver:8.3.1
restart: unless-stopped
ports:
- "80:80"
depends_on:
dj-mariadb:
condition: service_healthy
env_file: database.secret
environment:
- MYSQL_HOST=dj-mariadb
- MYSQL_USER=domjudge
- MYSQL_DATABASE=domjudge
- CONTAINER_TIMEZONE=Asia/Shanghai
volumes:
- ./backups:/opt/domjudge/domserver/backups
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/"]
interval: 30s
timeout: 10s
retries: 3
judgehost:
image: domjudge/judgehost:8.3.1
restart: unless-stopped
depends_on:
domserver:
condition: service_healthy
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
env_file: judgehost.secret
environment:
- DAEMON_ID=1
- CONTAINER_TIMEZONE=Asia/Shanghai
deploy:
replicas: 5 #评测机数量
bashdocker-compose up -d dj-mariadb
bash# 检查数据库健康状态
until docker-compose exec dj-mariadb mysqladmin ping -u root -p$(grep MYSQL_ROOT_PASSWORD database.secret | cut -d= -f2) --silent; do
echo "等待数据库启动..."
sleep 10
done
echo "数据库已就绪!"
bashdocker-compose up -d domserver
sh# 在 dom 目录下执行
# 创建必要的目录
mkdir -p database backups domserver_data/{public/images,public/flags,var}
# 从运行的容器中复制默认数据到宿主机
echo "正在复制 DOMServer 默认数据到宿主机..."
# 复制图片和标志文件
docker cp domserver:/opt/domjudge/domserver/webapp/public/images/. domserver_data/public/images/
docker cp domserver:/opt/domjudge/domserver/webapp/public/flags/. domserver_data/public/flags/
# 复制变量数据
docker cp domserver:/opt/domjudge/domserver/webapp/var/. domserver_data/var/
# 验证数据复制成功
echo "验证复制的数据:"
ls -la domserver_data/public/images/
ls -la domserver_data/public/flags/
echo "数据复制完成!"
ymlversion: "3.9"
services:
dj-mariadb:
container_name: dj-mariadb
image: mariadb:10.5
restart: unless-stopped
ports:
- "13306:3306"
volumes:
- ./database:/var/lib/mysql
env_file: database.secret
environment:
- MYSQL_USER=domjudge
- MYSQL_DATABASE=domjudge
- CONTAINER_TIMEZONE=Asia/Shanghai
command: --max-connections=1024 --max-allowed-packet=1G --innodb-log-file-size=512M
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "--password=$$MYSQL_ROOT_PASSWORD"]
start_period: 30s
interval: 10s
timeout: 5s
retries: 10
domserver:
container_name: domserver
image: domjudge/domserver:8.3.1
restart: unless-stopped
ports:
- "80:80"
depends_on:
dj-mariadb:
condition: service_healthy
env_file: database.secret
environment:
- MYSQL_HOST=dj-mariadb
- MYSQL_USER=domjudge
- MYSQL_DATABASE=domjudge
- CONTAINER_TIMEZONE=Asia/Shanghai
volumes:
- ./backups:/opt/domjudge/domserver/backups
- ./domserver_data/public/images:/opt/domjudge/domserver/webapp/public/images
- ./domserver_data/public/flags:/opt/domjudge/domserver/webapp/public/flags
- ./domserver_data/var:/opt/domjudge/domserver/webapp/var
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/"]
interval: 30s
timeout: 10s
retries: 3
judgehost:
image: domjudge/judgehost:8.3.1
restart: unless-stopped
depends_on:
domserver:
condition: service_healthy
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
env_file: judgehost.secret
environment:
- DAEMON_ID=1
- CONTAINER_TIMEZONE=Asia/Shanghai
deploy:
replicas: 5
bash# 获取自动生成的 judgehost 密码
echo "JUDGEDAEMON_PASSWORD=$(docker-compose exec domserver cat /opt/domjudge/domserver/etc/restapi.secret | awk 'END{print $4}')" > judgehost.secret
bash
# 获取管理员 admin 密码,用于登录 web 页面
docker exec -it domserver cat /opt/domjudge/domserver/etc/initial_admin_password.secret
# 可选:将管理员密码保存到文件
echo "$(docker exec -it domserver cat /opt/domjudge/domserver/etc/initial_admin_password.secret)" > adm-psd.txt

bashdocker-compose down docker-compose up -d
然后打开网页登录,账号是 admin

bash
echo "password=$(docker exec -it domserver cat /opt/domjudge/domserver/etc/initial_admin_password.secret)" > adm-psd.txt
shsudo apt update
sudo apt install openssh-server
sudo systemctl status ssh
sudo ufw allow ssh
sudo passwd root
vi /etc/ssh/sshd_config
#修改如下内容 设置PermitRootLogin 其他的配置默认是不开启root访问的
PermitRootLogin yes
sudo service sshd restart
# or
sudo systemctl restart sshd
vp了2023济南icpc,卡在一个典题上面(还是太菜了)。
题目链接:https://codeforces.com/gym/104901
直接说结论,给定一个无向图(无重边自环),每条边只能选择两个端点的其中一个,且必须选出一个,很显然对于其中一个连通块的选择方案只有 种(第一个点选或者不选一旦确定,后面点的状态是固定的),所以总共的选择方案为 , 为连通块的数量,当然前提是每个连通块都是二分图。
回到这个题,(设矩阵为 )当第 列和第 列 的个数超过 时无解,为 时不需要连边,为 时,若在同一行也不需要连,其他情况说明两个 在不同的行,设为 ,有两种情况:
1.两个 在同一列,说明两者必须一个反转,一个不反转
2.两个 在不同列,说明两个必须同时不变,或者同时反转
设 表示反转第 行, 对应不翻转第 行。
第一种情况,连 和 的边。
第二种情况,连 和 的边。
然后做二分图判定即可。
代码:
cpp#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define endl '\n'
const int M = 2e6 + 5;
const int inf = 2e9, mod = 1e9 + 7;
int a[M], b[M];
int vis[M];
string s[M];
vector<int> f[M];
void add(int x, int y)
{
f[x].push_back(y);
f[y].push_back(x);
// cout<<x<<" "<<y<<endl;
}
int dfs(int x){
for(auto to : f[x]){
if(vis[to]){
if(vis[x] == vis[to])return 0;
continue;
}
vis[to] = 3-vis[x];
if(!dfs(to))return 0;
}
return 1;
}
void solve()
{
int m, n;
cin >> m >> n;
for (int i = 1; i <= m; i++)
{
cin >> s[i];
s[i] = " " + s[i];
}
vector<int> cnt(n + 2);
vector<vector<int>> g(n + 2);
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
if (s[i][j] == '1')
{
cnt[j]++;
g[j].push_back(i);
}
}
for (int i = 1; i <= n; i++)
{
if (cnt[i] + cnt[n - i + 1] > 2)
{
cout << 0 << endl;
return;
}
}
for (int i = 1; i <= n / 2; i++)
{
if (cnt[i] + cnt[n - i + 1] == 2)
{
vector<int> v;
for (auto x : g[i])
v.push_back(x);
for (auto x : g[n - i + 1])
v.push_back(x);
int x = v[0], y = v[1];
if (x == y)
continue;
if (cnt[i] == 1)
{
add(x, y + m);
}
else
add(x, y);
}
}
for (int i = 1; i <= m; i++)
add(i, i + m);
int ans = 1;
for (int i = 1; i <= 2 * m; i++)
{
if (!vis[i])
{
vis[i] = 1;
if (!dfs(i))
ans = 0;
else
ans = ans * 2 % mod;
}
}
for (int i = 1; i <= 2 * m; ++i)
vis[i] = 0, f[i].clear();
cout << ans << endl;
}
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int T = 1;
cin >> T;
while (T--)
{
solve();
}
}
sh
for i in {a..m}
do
rm -rf $i
mkdir $i
touch $i/$i.cpp $i/$i.in $i/$i.out
done
shfile=$1/$1.cpp
g++ -o ./temp/main $file
./temp/main < $1/$1.in > $1/$1.out
cat $1/$1.out
shg++ -o ./temp/gen gen.cpp
g++ -o ./temp/std std.cpp
g++ -o ./temp/tle tle.cpp
while true; do
./temp/gen > in.txt
./temp/tle < in.txt > tleout.txt
./temp/std < in.txt > out.txt
diff tleout.txt out.txt
done
https://www.luogu.com.cn/problem/UVA11572
cpp#include<bits/stdc++.h>
using namespace std;
// #define int long long
const int M=2e5+5;
int a[M];
pair<int,int>f[M];
int dp[M][21];
int lo[M];
void solve(){
int n;
cin>>n;
for(int i=1;i<=n;++i)cin>>a[i];
map<int,int>cnt;
int l=1,r=0;
int ans=0;
while(l<=n&&r<=n){
while (r<n)
{
if(cnt[a[r+1]]==1)break;
r++;
cnt[a[r]]++;
}
ans=max(ans,r-l+1);
// cout<<l<<' '<<r<<endl;
cnt[a[l]]--;
l++;
}
cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int t=1;
cin>>t;
while(t--)solve();
return 0;
}