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[i]>=inf