ZEW 玩游戏 游记
是 1.12,星期五。
6:40 开始比赛,我还没登录网站()原因是在看其他人带表?
开了,第一题,不太习惯在比赛时看网页于是乎寻找 pdf:
done.
打开一看这 pdf 其实挺简陋,然后教练曰马上下文件然后断网。
这时 LuoTianYi 的电脑坏了,下不了文件 hhhh。
召唤教练并尝试使用 ftp,先试用 FileZilla
,but 无权限下载 or 复制,后使用文件夹但是还是复制不了,教练考虑去开网(指插上网线,哦原来断网是拔掉网线?),我建议 LuoTianYi 直接双击然后打开了(?)。
所以还是没有开网。
后来(21:30 后):
晓飞:会用文件么?这次是文件输入输出。
同学们:一片惊呼
晓飞:不会的举手。
几个人举手了。
晓飞:?额那改成普通吧。
同学们:又一片惊呼
T1
约 18:50 开始写,7 min done.
直接暴力,一个比较简单的办法是在有雷的时候直接改变周围区域,而不是输入完再查询周围区域。
赛后:。
ask shenshen:
shenshen:你这是瞎猫碰上个死对称样例。
于是发现了没有对雷进行特殊标记。
然后再交:
我:?
shenshen:
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++ i) {
char c = getchar();
for (int j = 1; j <= m; ++ j) {
c = getchar();
\[\Huge\downarrow
\]
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++ i) {
char c ;
for (int j = 1; j <= m; ++ j) {
cin>>c;
。
行。
是因为样例和测试数据不同,测试数据是 Windows 造的,回车:\r\n
!!1
以后的 char
绝不用 getchar
。
点击查看代码
/*
compiling in hszxoj
standard c++ 14
ide vscode:g++
g++ mine.cpp -o mine && ./mine
*/
#include <bits/stdc++.h>
#include <bits/extc++.h>
namespace {
#define filein(x) freopen(x".in", "r", stdin)
#define fileout(x) freopen(x".out", "w", stdout)
#define file(x) filein(x), fileout(x)
using namespace std;
using namespace __gnu_pbds;
#define ll long long
#define db double
#define un unsigned
#define ui un int
#define ull un ll
#define udb un db
template <typename T>
using pr = pair<T, T>;
#define pii pair<int>
#define pll pair<ll>
#define pdb pair<db>
#define fir first
#define sec second
#define mp(x, y) make_pair(x, y)
const int man = 1e3+10;
const int disx[10] = {-1, 0, 1, -1, 1, -1, 0, 1};
const int disy[10] = {1, 1, 1, 0, 0, -1, -1, -1};
}
int n, m;
int mp[man][man];
void pres ();
int main () {
pres();
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++ i) {
char c;
for (int j = 1; j <= m; ++ j) {
cin >> c;
if (c == '*') {
mp[i][j] = -1;
for (int k = 0; k < 8; ++ k)
if (mp[i+disx[k]][j+ disy[k]] != -1) ++ mp[i+disx[k]][j+disy[k]];
}
} }
for (int i = 1; i <= n; ++ i) {
for (int j = 1; j <= m; ++ j) printf("%c", mp[i][j]==-1?'*':mp[i][j]+'0');
puts("");
}
return 0;
}
// ---
void pres () {
#ifndef ONLINE_JUDGE
file("mine");
#endif
return ;
}
/*
$O(n^2) = 10^6 < 10^8$.
not dp.
less than 17 min:18:57.
haha, LuoTianYi's computer was broken.
too long.
*/
T3
HS_xh 表示:线性。
我思考了一下:\(\Large\text{二分答案}\)。
挺简单。
点击查看代码
/*
compiling in
standard
ide
g++ test.cpp -o test && ./test
*/
#include <bits/stdc++.h>
#include <bits/extc++.h>
namespace {
#define filein(x) freopen(x".in", "r", stdin)
#define fileout(x) freopen(x".out", "w", stdout)
#define file(x) filein(x), fileout(x)
using namespace std;
using namespace __gnu_pbds;
#define ll long long
#define db double
#define un unsigned
#define ui un int
#define ull un ll
#define udb un db
template <typename T>
using pr = pair<T, T>;
#define pii pr<int>
#define pll pr<ll>
#define pdb pr<db>
#define fir first
#define sec second
#define mp(x, y) make_pair(x, y)
const int man = 2e2+10;
}
int n, res;
int x[man], y[man];
pii ahd[man][man];
map<pii, int> mp;
void pres ();
int main () {
pres();
scanf("%d", &n);
for (int i = 1; i <= n; ++ i) {
scanf("%d%d", x+i, y+i);
for (int j = 1; j < i; ++ j) {
int xl = abs(x[i]-x[j]), yl = abs(y[i]-y[j]);
int gxy = abs(__gcd(xl, yl));
// printf("%d %d : A%d %dB %d %d-%d %d %d\n", i, j, x[i], y[i], x[j], y[j], xl, yl, gxy);
if ((x[i]<x[j]&&y[i]>y[j]) || (x[i]>x[j]&&y[i]<y[j])) gxy = -gxy;
if (!xl) ahd[i][j] = mp(0, 1);
else if (!yl) ahd[i][j] = mp(1, 0);
else ahd[i][j] = mp(xl/gxy, yl/gxy);
}
} // puts("");
for (int i = 1; i <= n; ++ i) {
for (int j = 1; j < i; ++ j) {
// printf("%d %d: %d\n", ahd[i][j].fir, ahd[i][j].sec, mp[ahd[i][j]]);
if (!mp[ahd[i][j]]) ++ res;
++ mp[ahd[i][j]];
}
} printf("%d", res);
return 0;
}
// ---
void pres () {
#ifndef ONLINE_JUDGE
file("test");
#endif
return ;
}
T4
以后一定顺序开题。
瞎开。
先咕着。
按暴力做的,超 \(1\)h 没写出。
T2
这题其实挺简单,但是我一开始看成二分图匹配了(雾)
所以先开了 T4。
后来一看:这点是可以重复选的。
可以列表:
\[\begin{array}{|c|c|c|c|c|c|}
\hline
point & 1 & 2 & 3 & 4 & \cdots \\ \hline
1 & - & - & - & - & \cdots \\ \hline
2 & x & - & - & - & \cdots \\ \hline
3 & x & x & - & - & \cdots \\ \hline
4 & x & x & x & - & \cdots \\ \hline
5 & x & x & x & x & \cdots \\ \hline
\end{array}
\]
每一个数使用一个单独下标标记,每一个下标只取一个。
点击查看代码
/*
compiling in
standard
ide
g++ test.cpp -o test && ./test
*/
#include <bits/stdc++.h>
#include <bits/extc++.h>
namespace {
#define filein(x) freopen(x".in", "r", stdin)
#define fileout(x) freopen(x".out", "w", stdout)
#define file(x) filein(x), fileout(x)
using namespace std;
using namespace __gnu_pbds;
#define ll long long
#define db double
#define un unsigned
#define ui un int
#define ull un ll
#define udb un db
template <typename T>
using pr = pair<T, T>;
#define pii pr<int>
#define pll pr<ll>
#define pdb pr<db>
#define fir first
#define sec second
#define mp(x, y) make_pair(x, y)
const int man = 2e2+10;
}
int n, res;
int x[man], y[man];
pii ahd[man][man];
map<pii, int> mp;
void pres ();
int main () {
pres();
scanf("%d", &n);
for (int i = 1; i <= n; ++ i) {
scanf("%d%d", x+i, y+i);
for (int j = 1; j < i; ++ j) {
int xl = abs(x[i]-x[j]), yl = abs(y[i]-y[j]);
int gxy = abs(__gcd(xl, yl));
// printf("%d %d : A%d %dB %d %d-%d %d %d\n", i, j, x[i], y[i], x[j], y[j], xl, yl, gxy);
if ((x[i]<x[j]&&y[i]>y[j]) || (x[i]>x[j]&&y[i]<y[j])) gxy = -gxy;
if (!xl) ahd[i][j] = mp(0, 1);
else if (!yl) ahd[i][j] = mp(1, 0);
else ahd[i][j] = mp(xl/gxy, yl/gxy);
++ mp[ahd[i][j]];
}
} printf("%ld", mp.size());
return 0;
}
// ---
void pres () {
#ifndef ONLINE_JUDGE
file("test");
#endif
return ;
}