1. 妹子 1 问题描述 万人迷皮皮轩收到了很多妹子的礼物,由于皮皮轩觉得每个妹子都不错,所以将她们礼物 的包装盒都好好保存,但长此以往皮皮轩的房间里都堆不下了,所以只能考虑将一些包装盒放 进其他包装盒里节省空间。 方便起见,我们不考虑包装盒的高度和厚度,只考虑包装盒的长宽。 一句话题意:给出两个矩形,问是否可以将一个矩形放在另一个矩形的内部(含边界),多 测。 2 输入格式 输入文件名为girls.in。 第一行,一个整数 n,表示数据组数。 对于下面的每一组数据: 第一行,四个整数 a1,b1,a2,b2 表示两个盒子的长宽。 3 输出格式 输出文件名为girls.out。 n 行,每行一个 ′′Y es′′ 或 ′′No′′(不含引号),分别表示其中一个盒子可以放到另一个盒子 中或两个盒子都不能放到另一个盒子中。
第一题第一个要注意的点是大对大,小对小,也就是可以旋转。
2. 旅程 1 背景 您曾经带领着我,穿过我的白天的拥挤不堪的旅程,而到达了我的黄昏的孤寂之境。在通 宵的寂静里,我等待着它的意义。 2 问题描述 神即将带领一些人去他们的孤寂之境,由于这个世界的不稳定,地点之间的有向道路会不 定期地毁坏,出于工作准备,神想知道在某些道路毁坏之后某两点之间的最短路。 就是给定一个有向图,现有两个操作,操作 1 是删除一条边(一条边可重复删除),操作 2 是询问两个点之间的最短路。 3 输入格式 输入文件名为journey.in。 第 1 行两个正整数 n, m,分别表示图的点数和操作数。 第 2 行至第 n + 1 行每行 n 个正整数,为图的邻接矩阵,第 i 行第 j 列的数表示点 i 和点 j 间距离,保证对角线为 0。 接下来 m 行每行三个正整数 c, x, y,c 表示操作种类,为 1 或 2,当 c = 1 时表示删除 x 与 y 相连的边,当 c = 2 时表示询问 x 到 y 的最短路,若不可达则输出 −1。 4 输出格式 输出文件名为journey.out。 输出若干行,每个 2 操作对应一行,答案为询问中 x 到 y 的最短路或 −1
#include<bits/stdc++.h>
using namespace std; const long long inf=0x3f3f3f3f; long long n,m,a[205][205],w[100005],op[100005],x[100005],y[100005],ans[100005],cnt; int main(){ scanf("%lld%lld",&n,&m); for(long long i=1;i<=n;i++) for(long long j=1;j<=n;j++) scanf("%lld",&a[i][j]); for(long long i=1;i<=m;i++) { scanf("%lld%lld%lld",&op[i],&x[i],&y[i]); if(op[i]==1){ w[i]=a[x[i]][y[i]]; a[x[i]][y[i]]=inf; } } for(long long k=1;k<=n;k++) for(long long i=1;i<=n;i++) for(long long j=1;j<=n;j++){ a[i][j]=min(a[i][j],a[i][k]+a[k][j]); } for(long long z=m;z>=1;z--){ if(op[z]==1){ for(long long i=1;i<=n;i++) for(long long j=1;j<=n;j++){ a[i][j]=min(a[i][j],a[i][x[z]]+a[y[z]][j]+w[z]); } } else ans[++cnt]=a[x[z]][y[z]]; } for(long long i=cnt;i>=1;i--){ if(ans