比赛题目训练系列05 (2020-2021 ACM-ICPC, Asia Seoul Regional Contest)

news/2024/5/10 1:35:19/文章来源:https://blog.csdn.net/qq_45812711/article/details/115040850

比赛题目训练系列05 (2020-2021 ACM-ICPC, Asia Seoul Regional Contest)

训练网址

A. Autonomous Vehicle

  • 大模拟。挖坑

B. Commemorative Dice

  • 题意:给两个色子六个面的数字,第一个人掷色子的数字比第二个人大算作胜利。问第一个人胜利的概率是多少?
  • 签到,很简单,不讲了。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int gcd(int a, int b) {if (b == 0) return a;return gcd(b, a % b);
}
int a[10], b[10];
int main() {for (int i = 1; i <= 6; i++) scanf("%d", &a[i]);for (int i = 1; i <= 6; i++) scanf("%d", &b[i]);int res = 0;for (int i = 1; i <= 6; i++) {for (int j = 1; j <= 6; j++) {res += a[i] > b[j];}}int d = gcd(res, 36);res /= d;printf("%d/%d\n", res, 36 / d);return 0;
}

C. Dessert Café

  • 题意:给你n个点的树,边权为距离,然后给出k个特殊的点。现在要找的是点p,对于点p,有一个特殊点z,除了p和z之外的任何点x,d(p,z)<d(x,z);而且又存在一个特殊的点z1,d(p,z1)<d(z,z1)。问这样的点p有多少个?
  • 这道题想一想不难,对于一个结点。如果他有小于等于一个子树,那么该点满足条件当且仅当它是complex。对于度数大于等于2的结点,如果存在两棵子树,每个子树都至少有一个complex(这里子树是从u和v相连的中间那条边划分的),那么该结点满足条件。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 100010, maxm = 200010;
int h[maxn], e[maxm], ne[maxm], w[maxm], idx;
int sz[maxn];
bool is_candidate[maxn], ok[maxn];
void add(int a, int b, int c) {e[idx] = b, ne[idx] = h[a], w[idx] = c, h[a] = idx++;
}int N, K, ans;int dfs(int u, int fa) {sz[u] = is_candidate[u] ? 1 : 0;for (int i = h[u]; i != -1; i = ne[i]) {int v = e[i];if (v == fa) continue;sz[u] += dfs(v, u);}return sz[u];
}
void dfs2(int u, int fa) {if (is_candidate[u]) ok[u] = true;for (int i = h[u]; i != -1; i = ne[i]) {int v = e[i];if (v == fa) continue;if (sz[v] && K - sz[v]) ok[u] = true;dfs2(v, u);}
}
int main() {memset(h, -1, sizeof h);scanf("%d%d", &N, &K);for (int i = 1; i < N; i++) {int a, b, c;scanf("%d%d%d", &a, &b, &c);add(a, b, c), add(b, a, c);}for (int i = 1; i <= K; i++) {int x;scanf("%d", &x);is_candidate[x] = true;}dfs(1, -1);dfs2(1, -1);for (int i = 1; i <= N; i++) {ans += ok[i] ? 1 : 0;}printf("%d\n", ans);return 0;
}

D. Electric Vehicle

  • 没搜到题解,挖坑。

E. Imprecise Computer

  • 题意:IC出了问题,对于两个差值小于二的数a,b进行大小比较时,有可能输出a >b也有可能输出a <b。现对于长度为n的数列 Pn={1,2,3,…,n} 中每个数依次与别的数进行比较,若大于得一分,比赛进行两轮,让你判断输入的数组Dn是否为两场比赛中每个数可能出现的分差。
  • 思路:不难的,就是分类讨论一下。当计算到 i 的时候,我们只需要关注 i − 1 i - 1 i1, i + 1 i + 1 i+1 即可。其实只需要关注 i 和 i + 1 即可。因为 i 和 i - 1 已经在 i - 1 的时候比较过了。直接看代码。
  • 这道题其实手动把样例1模拟一遍,思路就出来了。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1000010;
int a[maxn], b[maxn], r[maxn];
int N;
bool check() {for (int i = 1; i < N; i++) {if (abs(a[i] - b[i]) < r[i]) {if (a[i] > b[i]) a[i]++, b[i + 1]++;else a[i + 1]++, b[i]++;}else if (abs(a[i] - b[i]) == r[i]) a[i]++, b[i]++;else {if (a[i] > b[i]) a[i + 1]++, b[i]++;else a[i]++, b[i + 1]++;}if (abs(a[i] - b[i]) != r[i]) return false;}return abs(a[N] - b[N]) == r[N];
}
int main() {scanf("%d", &N);for (int i = 1; i <= N; i++) scanf("%d", &r[i]);if (check()) printf("YES\n");else printf("NO\n");return 0;
}

F. Ink Mix

  • 没搜到题解。挖坑。

G. Mobile Robot

  • 韩国人出题,题意怎么这么绕!好几道题都是题目巨长,信息冗杂
  • 题意:给一个序列和公差d,让你把这个序列调节为等差序列,最小化移动距离的最大值。
  • 可以看出来是一个凹函数,并且第一个位置确定后,答案就确定了。因此我们可以三分第一个位置。
  • 然后,浮点数误差出了问题,我改用 long long,因为只保留一位小数,因此我把数字都乘了10.
  • 然后,三分的板子出了问题,while(ub - lb > 1) 不对,因为和二分不一样。我改了改板子。改了n多次。
  • 然后,才明白不一定是个递增序列,还可能是递减序列。
  • 然后,三分超时了。看来得换个方法了。
  • 我们这样思考,假设第一个位置 a[1] 就是等差序列的起点,那么我们可以计算每一个点的移动,记录最多向左移动的距离 lmost,和最多向右移动的距离 rmost。如果我们要把等差序列起点左移的话,rmost一定会增加。如果右移的话,lmost 必然会增加。因为我们只关心最大值。那么,我们可知最小化的最大值就是 l m o s t + r m o s t 2 \frac{lmost + rmost}{2} 2lmost+rmost. 但是我们也要注意的是,可能是个递减序列,因此要把 D ∗ = − 1 D *= -1 D=1,然后再跑一遍上述过程。
  • 然后,神奇的题目,用 GNU C++17 (64) 会莫名其妙超时,我查看了一下,答案已经输出了,但是似乎检测出了问题?评测姬快来背锅
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;
const int maxn = 1000010;
typedef long long ll;
ll a[maxn], D;
int N;ll f() {ll lmost = 0, rmost = 0;for (int i = 1; i <= N; i++) {ll x = a[1] + (i - 1LL) * D;if (x > a[i]) rmost = max(rmost, x - a[i]);if (x < a[i]) lmost = max(lmost, a[i] - x);}return (lmost + rmost) / 2;
}int main() {scanf("%d%lld", &N, &D);D *= 10;for (int i = 1; i <= N; i++) {scanf("%lld", &a[i]);a[i] *= 10;}ll ans = f();D = -D;ans = min(ans, f());printf("%lld.%lld\n", ans / 10, ans % 10);return 0;
}

H. Needle

  • 给三条等间距的平行线,平行线上有一些点(坐标范围是 [ − 30000 , 30000 ] [-30000,30000] [30000,30000])。分别从三条直线上任取一点,问有多少种取法,使得他们在同一直线上。
  • 我们想想充要条件是什么。从第一条直线和第三条直线上分别任取一点 x 1 , x 3 x_1, x_3 x1,x3. 那么,如果第二条直线上有一点可以和 x 1 , x 3 x_1, x_3 x1,x3 共线,等价于 x 2 = x 1 + x 3 2 x_2 = \frac{x1 + x3}{2} x2=2x1+x3. 因此,我们看看第一条直线和第三条直线可以有多少种组合形式。那么,是不是可以看成两个多项式的卷积啊。设 f = a ∗ c f = a * c f=ac,然后答案就是 ∑ b [ i ] ∗ f [ 2 ∗ i ] \sum\limits b[i]* f[2*i] b[i]f[2i].
  • 不过傅里叶变换一定要小心细节。(1)数组中存的是多项式的系数。(2)最后a.x一定要除以 tot 才是卷积的系数。(3)数组开多大取决于数的取值范围,而且一定要大于2的整数幂。
  • 由此可见,计数类问题,有时候可以用FFT解决。因为计数类问题有时候可以转化为多项式得卷积。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const double PI = acos(-1);
const int maxn = 300010;
typedef long long ll;
struct Complex {double x, y;Complex operator + (const Complex& t)const {return { x + t.x, y + t.y };}Complex operator - (const Complex& t)const {return { x - t.x, y - t.y };}Complex operator * (const Complex& t)const {return { x * t.x - y * t.y, x * t.y + y * t.x };}
}a[maxn], c[maxn];
int rev[maxn], bit, tot;
int b[maxn];
void fft(Complex a[], int inv) {for (int i = 0; i < tot; i++) {if (i < rev[i]) swap(a[i], a[rev[i]]);}for (int mid = 1; mid < tot; mid <<= 1) {auto w1 = Complex({ cos(PI / mid), inv * sin(PI / mid) });for (int i = 0; i < tot; i += mid * 2) {auto wk = Complex({ 1, 0 });for (int j = 0; j < mid; j++, wk = wk * w1) {auto x = a[i + j], y = wk * a[i + j + mid];a[i + j] = x + y, a[i + j + mid] = x - y;}}}
}
int dif = 30000;
int main() {int N1, N2, N3;scanf("%d", &N1);for (int i = 1; i <= N1; i++) {int x;scanf("%d", &x);a[x + dif].x += 1;}scanf("%d", &N2);for (int i = 1; i <= N2; i++) {int x;scanf("%d", &x);b[x + dif] += 1;}scanf("%d", &N3);for (int i = 1; i <= N3; i++) {int x;scanf("%d", &x);c[x + dif].x += 1;}bit = 17;tot = (1 << bit);for (int i = 0; i < tot; i++) {rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (bit - 1));}fft(a, 1), fft(c, 1);for (int i = 0; i < tot; i++) a[i] = a[i] * c[i];fft(a, -1);ll ans = 0;//一定要小心,这里是数据范围最大,即60000//而且,卷积的结果在 a 中,要除以 tot 才对。而且,四舍五入的话(比如round),不要加上 0.5,+0.5意味着舍弃小数部分。for (int i = 0; i <= 60000; i++) {ll x = a[2 * i].x / tot + 0.5;ans += x * b[i];}printf("%lld\n", ans);return 0;
}

I. Stock Analysis

  • 给一个序列 ( n ≤ 2000 ) (n\le 2000) (n2000),给 Q ( Q ≤ 20000 ) Q(Q\le20000) Q(Q20000) 组询问 ( l , r , u ) (l, r, u) (l,r,u),问在 ( l , r ) (l, r) (l,r) 内,不大于 u u u 的最大连续子段和是多少?
  • 一开始用线段树套平衡树,后来发现不对。因为树套树只能维护一段一段的区间。如果某个区间横跨线段树的维护的两个区间,答案也是横跨了结点的两个区间,这样的答案是查询不到的。
  • 有一个思路是,所有区间和总共也只有 2e6 个。因此预处理出所有区间和,再读入所有询问。然后按照值排序。这样子的话,大于 U 的区间和只会在 U 之后出现,这样子的话,就可以转化为求小矩形最大值的问题。
  • 但是,不会求小矩形最大值。
  • 看不懂的二维树状数组写法
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const ll INF = 1e18;
const int maxn = 2010, maxm = 200010;
struct node {int l, r, id;ll val;
};
vector<node> q;
ll w[maxn], tr[maxn][maxn], ans[maxm];
int lowbit(int x) {return x & -x;
}
bool cmp(const node& u, const node& v) {return u.val < v.val || u.val == v.val && u.id < v.id;
}
int N, M;
void update(int x, int y, ll v) {while (x) {int z = y;while (z <= N) {tr[x][z] = max(tr[x][z], v);z += z & -z;}x -= x & -x;}
}ll query(int x, int y) {ll res = -INF;while (x <= N) {int z = y;while (z) {res = max(res, tr[x][z]);z -= z & -z;}x += x & -x;}return res;
}
int main() {scanf("%d%d", &N, &M);for (int i = 1; i <= N; i++) {fill(tr[i], tr[i] + N + 1, -INF);}for (int i = 1; i <= N; i++) {scanf("%lld", &w[i]);w[i] += w[i - 1];}for (int i = 1; i <= N; i++) {for (int j = i; j <= N; j++) {q.push_back({ i, j, 0, w[j] - w[i - 1] });}}for (int i = 1; i <= M; i++) {int l, r;ll x;scanf("%d%d%lld", &l, &r, &x);q.push_back({ l, r, i, x });}sort(q.begin(), q.end(), cmp);for (auto p : q) {int l = p.l, r = p.r, id = p.id;ll val = p.val;if (!id) update(l, r, val);else ans[id] = query(l, r);}for (int i = 1; i <= M; i++) {if (ans[i] != -INF) printf("%lld\n", ans[i]);else printf("NONE\n");}return 0;
}

J. Switches

  • 题意:已知有 n n n 个开关和 n n n 盏灯,现在每一个开关可以控制若干盏灯,该信息用矩阵表示。一盏灯要亮,当且仅当这盏灯对应的开关数量为奇数。问对于每一盏灯,能否打开若干个开关,使得只有该盏灯是亮的,而其他灯都是灭的。若可以,输出每一盏灯对应的开关,否则输出 − 1 -1 1
  • 这个是别人写的题解,我觉得讲的非常清楚,就不多言了。
如果对于每个灯列一个n*n的01矩阵进行高斯消元求解,
总复杂度是O(n^4)的,显然不行.设矩阵A为系数矩阵,
X为开关操作矩阵(未知数矩阵),
B为结果矩阵(常数矩阵),
那么有A*X=B,
左右同时乘上A^(-1)得:X=A^(-1)*B.求出A矩阵的逆矩阵A^(-1),
因为B矩阵是n*1的,
所以A^(-1)*B是O(n^2)的,
枚举i,构造Bi,计算第i个灯的答案,
总复杂度是O(n^3)的.但是n<=500,O(n^3)还是会T,
矩阵求逆 和 矩阵乘法 都需要用bitset优化.版权声明:本文为CSDN博主「live4m」的原创文章,遵循CC 4.0 BY - SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https ://blog.csdn.net/weixin_44178736/article/details/113361135
  • 注意题目输入,说的是第 i 行表示第 i 个开关控制那些灯。而我们在列异或方程组的时候,每一行应该是都有哪些开关控制着第 i 个灯。因此要把输入矩阵转置一下。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<bitset>
using namespace std;
const int maxn = 510;
bitset<maxn * 2> a[maxn];
bitset<maxn> b, inv_a[maxn], ans;
int N;
bool Gauss_inv() {for (int c = 1; c <= N; c++) {int t = c;for (int i = c; i <= N; i++) {if (a[i][c]) {t = i;break;}}if (a[t][c] == 0) return false;swap(a[t], a[c]);//小心这个地方要从第一行开始看。大雪菜那个是从 r + 1 行开始,那是因为他没有化成单位矩阵//但是求逆矩阵必须要化为单位阵。for (int i = 1; i <= N; i++) {if (a[i][c] && i != c) {a[i] ^= a[c];}}}return 1;
}
// A = B * C
void mul(bitset<maxn>& a, bitset<maxn> b[], bitset<maxn>& c) {for (int i = 1; i <= N; i++) {//小心这个地方是与,不是异或。矩阵乘法怎么可以写异或呢!a[i] = (b[i] & c).count() % 2;}
}int main() {scanf("%d", &N);for (int i = 1; i <= N; i++) {a[i][i + N] = 1;for (int j = 1; j <= N; j++) {int x;scanf("%d", &x);if (x) a[j][i] = 1;}}if (!Gauss_inv()) {printf("-1\n");}else {for (int i = 1; i <= N; i++) {for (int j = 1; j <= N; j++) inv_a[i][j] = a[i][j + N];}/*for (int i = 1; i <= N; i++) {for (int j = 1; j <= N; j++) cout << a[i][j + N] << " ";cout << endl;}*/for (int i = 1; i <= N; i++) {b.reset();b[i] = 1;ans.reset();mul(ans, inv_a, b);for (int i = 1; i <= N; i++) {if (ans[i]) printf("%d ", i);}printf("\n");}}return 0;
}

K. Tiling Polyomino

  • 挖坑。找到题解或者看懂代码再补

L. Two Buildings

  • 题意:给定长度为 n n n 的数组 h h h,要求计算 m a x { ( h [ i ] + h [ j ] ) ∗ ( j − i ) } max\{(h[i]+h[j])*(j-i)\} max{(h[i]+h[j])(ji)},其中 i < j i<j i<j。数据范围: n < = 1 e 6 , 1 < = h ( i ) < = 1 e 6 n<=1e6,1<=h(i)<=1e6 n<=1e6,1<=h(i)<=1e6.
  • 极为优秀的题解. 由于原题解图片以及讲解有点小问题(也可能是我没理解对)。下面做了一些改动
    在这里插入图片描述
(h[i]+h[j])*(j-i)
=(h[j]-(-h[i]))*(j-i)令a[i]=h[i],b[i]=-h[i],
那么可以转化为计算(a[j]-b[i])*(j-i),
转化为(i,a[i]),(j,b[j])在二维坐标系中围成的矩形面积。本质就是在 y 轴上方选一点,y轴下方选一点,使得举行的面积最大。对于一个固定的(j,a[j]),选择的(i,b[i])显然位置左下越优.
那么对于(i,b[i])和(j,b[j]),如果i<j且b[i]>=b[j],
那么(i,b[i])完全可以删去。对于 a 数组也是同理(a数组中的数据,越靠近右上方越优)。
去掉b[]无用点之后,剩下的点一定是对于i<j,有b[i]<b[j],
同理a[]去掉无用点之后,剩下的点一定是对于i<j,有a[i]>b[j].对于a[1,n],设mid=(l1+r1)/2,
设点(mid,a[mid])在点(pos,b[pos])处获得最大值.
那么对于(mid,a[mid])左边的点(j,a[j]),
他们的最优解点(i,b[i])一定满足i<=pos,
可以用反证法证明,
大概就是如果i>pos,那么(mid,a[mid)的就不是(pos,b[pos])了,
画一下图应该也能证明出来.假设现在我们已经求出(mid,a[mid])和(pos,b[pos])配对最优,
根据我们上面的结论,我们只需要继续分别计算:
1.a[l1,mid-1]和b[l2,pos]匹配的最大值.
2.a[mid+1,r2]h和b[pos,r2]匹配的最大值.
同(mid,a[mid])与(pos,b[pos])的值,三者取max就是答案,
其中情况1和情况2是子问题,可以递归计算.

在这里插入图片描述

  • 画了个图,可见在求解左边的子问题中,b数组对应的最优解一定不会在 pos 的右边。这个是可以参考上方图形证明的,用小矩形边之间的关系即可。
    代码
#include<iostream>
#include<cstring>
#include<algorithm>
#define x first
#define y second
using namespace std;
const int maxn = 1000010;
int N, M;
typedef long long ll;
typedef pair<ll, ll> P;
P a[maxn], b[maxn];
bool del[maxn];
ll cal(int j, int i) {return (a[j].y - b[i].y) * (a[j].x - b[i].x);
}
ll solve(int l1, int r1, int l2, int r2) {if (l1 > r1 || l2 > r2) return 1e-18;int mid = (l1 + r1) / 2, pos = l2;ll res = cal(mid, pos);for (int i = l2 + 1; i <= r2; i++) {ll tmp = cal(mid, i);if (tmp >= res) {pos = i;res = tmp;}}return max(res, max(solve(l1, mid - 1, l2, pos), solve(mid + 1, r1, pos, r2)));
}
int main() {scanf("%d", &N);M = N;for (int i = 1; i <= N; i++) {scanf("%lld", &a[i].y);a[i].x = i;b[i] = { i, -a[i].y };}sort(a + 1, a + N + 1);sort(b + 1, b + N + 1);int cnt = 0, last = N;//删掉 a 中多余的点,越靠近右上方越优。for (int i = N - 1; i >= 1; i--) {if (a[i].y <= a[last].y) {del[i] = true;}else {last = i;}}for (int i = 1; i <= N; i++) {if (!del[i]) {//注意,这个地方不可以写成 ++cnt, a[cnt] = {cnt, a[i].y},因为原本的位置信息必须要保留。a[++cnt] = a[i];}}N = cnt;//删掉 b 中左下方的点。memset(del, false, sizeof del);last = 1, cnt = 0;for (int i = 2; i <= M; i++) {if (b[i].y >= b[last].y) {del[i] = true;}else {last = i;}}for (int i = 1; i <= M; i++) {if (!del[i]) {b[++cnt] = b[i];}}M = cnt;printf("%lld\n", solve(1, N, 1, M));return 0;
}
  • 本来想用旋转卡壳求距离最远的两个点。后来感觉不太对,因为距离最远的两个点,形成的矩形面积不一定是最大的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_862992.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取网站路径绝对路径的方法汇总

获取网站路径绝对路径的方法汇总 一、单引号爆路径 就像测试SQL注入一样在参数后面加上单引号。 1 http://localhost/news.php?id100 二、错误参数值爆路径 通过第一种方式可以会触发waf&#xff0c;因此可以通过错误的参数值来爆网站路径。 如&#xff1a; 1 2 http:/…

【代码审计】对另一套钓鱼网站的代码审计

前言 之前有粉丝投稿过一篇对钓鱼网站的代码审计&#xff0c;然后就有位老哥给我发了另一套还算比较新的钓鱼网站的源代码让我玩玩。源码收到后拖了好几天终于抽出一点时间来审计一下并记录此文。&#xff08;打工人就是一块砖&#xff0c;哪里需要往哪里搬~&#xff09; 钓鱼…

使用IntelliJ IDEA开发SpringMVC网站(一)开发环境

文章已针对IDEA 2016做了一定的更新&#xff0c;部分更新较为重要&#xff0c;请重新阅读文章并下载最新源码。 另外&#xff1a;文中的附图部分仍然为旧版本&#xff0c;请参照自身版本进行配置。 前言 由于近期一直在做学术方面的工作&#xff0c;项目开发相关工作并没有花太…

使用IntelliJ IDEA开发SpringMVC网站(二)框架配置

文章已针对IDEA 2016做了一定的更新&#xff0c;部分更新较为重要&#xff0c;请重新阅读文章并下载最新源码。 另外&#xff1a;文中的附图部分仍然为旧版本&#xff0c;请参照自身版本进行配置。 五、SpringMVC框架配置 进行完上面的配置&#xff0c;那就说明现在基本的开发…

使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置

六、数据库配置 下面&#xff0c;就要通过一个简单的例子&#xff0c;来介绍SpringMVC如何集成Spring Data JPA&#xff08;由 Hibernate JPA 提供&#xff09;&#xff0c;来进行强大的数据库访问&#xff0c;并通过本章节的讲解&#xff0c;更加深刻地认识Controller是如何进…

使用IntelliJ IDEA开发SpringMVC网站(四)用户管理

七、用户管理 既然我们要做一个博客管理系统&#xff0c;当然要首先实现我们的用户管理。在上一文中&#xff0c;我们已经配置好了数据库。接下来&#xff0c;就要实现网站的一些业务逻辑。 1、JPA操作定义 在实现用户管理操作之前&#xff0c;需要讲解一下JPA的开发工作。 首先…

个人网站搭建保姆级教学:Hexo + Kaze + Gitee Pages

前 言 建网站本身是一个很大的工程&#xff0c;涉及前端页面的搭建&#xff0c;网站数据的存储&#xff0c;还要购置服务器资源&#xff0c;甚至是后期的维护&#xff0c;过程相当繁琐。 不过如果仅仅是想搭建个人的网站&#xff0c;写写博客&#xff0c;想要美观&#xff0c…

搭建 Drupal 个人网站的图文教学

操作场景 Drupal 是使用 PHP 语言编写的开源内容管理框架&#xff08;CMF&#xff09;&#xff0c;由内容管理系统&#xff08;CMS&#xff09;及 PHP 开发框架&#xff08;Framework&#xff09;共同构成。Drupal 具备强大的定制化开发能力&#xff0c;您可使用 Drupal 作为个…

云服务器,网站域名没有备案为啥就无法访问呢?

不是阿里云的要备案&#xff0c;而且只要是服务器在国内的&#xff0c;就都要备案才可以正常使用的哦&#xff01; 下面咱们逐个解答题主的问题&#xff1a; 1、备案指的是域名备案还是ip备案还是阿里云租的服务器备案&#xff1f; 备案指的是域名的备案&#xff0c;因为备案…

利用爬虫爬取看看豆网站站的数据信息

其实很早我就开始关注爬虫技术&#xff0c;这两天特别学习了一下&#xff0c;并且做了一个简单的demo。爬取了看看豆网站的数据信息。总共11751本书&#xff0c;爬取了不到3个小时&#xff0c;基本每秒爬取1条。速度慢的原因主要是单线程&#xff0c;使用mysql数据库。想要提高…

利用爬虫爬取 zol网站热门手机

使用了20几分钟&#xff0c;爬取了zol相关的热门手机型号、特点、价格、上市时间、屏幕大小相关信息。对最新的热门手机做了一个简单的统计。如果你想知道任何其他的信息&#xff0c;可以给我留言。我已经把我的相关代码传导了github上。欢迎下载。另附其中还有关于LOL英雄数据…

又拍网架构-又一个用到PYTHON的网站

又拍网是一个照片分享社区&#xff0c;从2005年6月至今积累了260万用户&#xff0c;1.1亿张照片&#xff0c;目前的日访问量为200多万。5年的发展历程里经历过许多起伏&#xff0c;也积累了一些经验&#xff0c;在这篇文章会介绍一些在技术上的积累。 又拍网和大多数Web2.0站点…

web网站搜索框的搜索实现

js 添加一个按钮 &#xff0c;给按钮&#xff0c;添加&#xff0c;onclick事件"aiqiyi()" function aiqiyi(){ var t获取搜索框值&#xff1b; window.location.href"http://so.iqiyi.com/so/q_"t; http://so.iqiyi.com/so/q_ 是爱奇艺的搜索&#xff…

IIS+php环境下TinkPHP5的网站配置总结(萌新亲测)

环境介绍 Win7;我用的是ThinkPHP5.0框架&#xff1b;phpStudy2008集成环境&#xff0c;它会集成php5.2到7.2的所有版本&#xff0c;所以免去了安装php的步骤。一开始我在本地用的是Apachephp环境运行的网站&#xff0c;这是没有任何问题的&#xff0c;但是服务器的环境是IISph…

六款堪称神器的网站

导读网站是通往互联网世界的一大工具&#xff0c;在这片信息的海洋上&#xff0c;总有那么几款产品&#xff0c;如海岛般骄傲伫立&#xff0c;带给人不一样的感觉。当然&#xff0c;本文的标题是有失公允的&#xff0c;世界是优秀的产品不计其数&#xff0c;要分类罗列出来简直…

APP设计与网站着陆页设计

APP设计 可用性的四要素 o 功能性&#xff1a;这个产品能够正常工作吗&#xff1f; o 可学习性&#xff1a;这个产品在不经过额外学习的情况下能够顺利使用吗&#xff1f; o 灵活性&#xff1a;除了完成主要的任务之外&#xff0c;这个产品能做更多的事情吗&#xff1…

win2012 服务器IIS 8.0 搭建FTP,VS2015发布网站(一)FTP设置

沉寂了段时间&#xff0c;想明白了一些事情&#xff0c;现在准备学学asp.net5当前微软的主流mvc5开发网站 现在想用nopcommerce 搭建商城&#xff0c;作为业余时间的爱好玩玩 首先&#xff0c;打开服务器管理器&#xff0c;点击添加角色和功能 web服务器IIS里面这些选项打勾 然…

win2012 服务器IIS 8.0 搭建FTP,VS2015发布网站(二)Visual Studio发布网站

书接上文&#xff0c;右键项目&#xff0c;点击发布 发布web里面&#xff0c;点击 自定义 输入配置文件名称 发布方法-选择FTP 服务器-填写ftp://ftp服务器地址:端口&#xff0c;例子:ftp://baidu.com:21端口号一定要加 站点路径-如果ftp的根路径是/&#xff0c;网站绝对路径…

python爬取前程无忧招聘网站数据搭建Hadoop、Flume、Kafka、Spark用Hive做数据分析Sqoop存储到Mysql并实现可视化

文章目录 一、项目总体要求二、环境搭建1、安装包准备2、安装jdk&#xff08;1&#xff09;查询是否安装java&#xff08;2&#xff09;卸载jdk&#xff08;3&#xff09;安装jdk&#xff08;4&#xff09;配置jdk环境变量 3、配置ssh免密登录&#xff08;1&#xff09;进入到我…

爬取我爱我家网站二手房信息

items文件定义爬取数据&#xff1a; apartment scrapy.Field() total_price scrapy.Field() agent scrapy.Field() image_urls scrapy.Field() images scrapy.Field()spider文件&#xff1a; # -*- coding: utf-8 -*- import scrapy from pachong2.items import Pachong…