Wannafly挑战赛3
Posted BobHuang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wannafly挑战赛3相关的知识,希望对你有一定的参考价值。
B遇见
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 65536K,其他语言131072K
64bit IO Format: %lld
空间限制:C/C++ 65536K,其他语言131072K
64bit IO Format: %lld
题目描述
A和B在同一条路上,他们之间的距离为 k 米。A现在想见到B,所以A开车以 x km/h的速度朝着B的方向行驶,同时B也以 y km/h的速度朝着A的方向走去。A的车有 n 个档位,每个档位有不同的速度。现在假设A开车去见B,求他最快和最慢在几秒后能见到B。
输入描述:
一开始一行三个整数 n, m, k ,代表A的车的档位数、B行走的速度和AB之间的距离。
接下来一行 n 个整数,代表A的车的不同档位的行驶速度。
输出描述:
一行两个整数,代表A最快/最慢在几秒后能见到B(向上取整)。
示例1
输入
5 20 80 30 15 10 5 -5
输出
6 20
备注:
对于所有数据,0 <= n <= 1000,-100000 <= A车速度 <= 100000,-A最慢速度 < B行走速度 <= 100000,0 <= k <= 100000.
题目保证最大值和最小值都有解。
本来没看数据范围,还听大佬一直在喊+0.5,还真的就+0.5交了好几发。还说这个提交时间很长是还没有返回结果,还没交上,爆交失败
最后发现n=0,mmp
#include <bits/stdc++.h> using namespace std; int a[1005]; int main() { int n,m,k; ios::sync_with_stdio(false); cin>>n>>m>>k; for(int i=0; i<n; i++) cin>>a[i]; int ma=*max_element(a,a+n),mi=*min_element(a,a+n); cout<<(ceil)(k*3.6/fabs(m+ma))<<" "<<(ceil)(k*3.6/fabs(m+mi)); return 0; }
#include <bits/stdc++.h> using namespace std; int main() { int n,m,k; cin>>n>>m>>k; if(n==0)cout<<(ceil)(k*3.6/m)<<" "<<(ceil)(k*3.6/m); else { vector<int>V; for(int i=0; i<n; i++) { int x; cin>>x; V.push_back(x); } sort(V.begin(),V.end()); cout<<(ceil)(k*3.6/(m+V[n-1]))<<" "<<(ceil)(k*3.6/(m+V[0])); } return 0; }
DButterfly2
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 65536K,其他语言131072K
64bit IO Format: %lld
空间限制:C/C++ 65536K,其他语言131072K
64bit IO Format: %lld
题目描述
给定一个 n*m 的矩阵,矩阵元素由X和O构成,请求出其中最大的蝴蝶形状。
蝴蝶形状的定义如下:
存在一个中心点(必须为X),并且其往左上(必须为X)、左下(必须为X)、右上(必须为O)、右下(必须为O)四个方向扩展相同的长度,且左上顶点与左下顶点之间全由X填充,右上顶点与右下顶点之间全由O填充。
蝴蝶形状的定义如下:
存在一个中心点(必须为X),并且其往左上(必须为X)、左下(必须为X)、右上(必须为O)、右下(必须为O)四个方向扩展相同的长度,且左上顶点与左下顶点之间全由X填充,右上顶点与右下顶点之间全由O填充。
我们不在意在蝴蝶形状内部是X还是O。
例如:
XAAAO
XXAOO
XAXAO
XXAOO
XAAAO
是一个蝴蝶形状(其中A表示X或O)。
X
也是。
而
XAAO
XXOO
XXOO
XAAO
不是(不存在中心点)。
XAAAO
XXAOO
XAXAO
XXAOO
XAAAO
是一个蝴蝶形状(其中A表示X或O)。
X
也是。
而
XAAO
XXOO
XXOO
XAAO
不是(不存在中心点)。
输入描述:
第一行两个整数n, m表示矩阵的大小 (1 <= n, m <= 500);
接下来 n 行,每行一个长度为 m 的字符串表示矩阵,矩阵元素保证由X和O构成。
输出描述:
一行一个整数表示最大的蝴蝶形状的对角线的长度。
示例1
输入
5 5 XOOOO XXOOO XOXOO XXOOO XOOOO
输出
5
暴力前缀和,处理下情况,然后去枚举
#include <bits/stdc++.h> using namespace std; char s[501][501]; int X[501][501],O[501][501]; int n, m; int main() { scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) scanf("%s",s[i]+1); for(int j=1; j<=m; j++) for(int i=1; i<=n; i++) { X[i][j]=X[i-1][j]+(s[i][j]==‘X‘); O[i][j]=O[i-1][j]+(s[i][j]==‘O‘); } int ans=0; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) if(s[i][j]==‘X‘) { ans=max(ans,1); for(int k=1;; k++) { int l=j-k,r=j+k,u=i-k,d=i+k; if(l<1||r>m||u<1||d>n||s[u][l]!=‘X‘||s[u][r]!=‘O‘||s[d][l]!=‘X‘||s[d][r]!=‘O‘)break; if(O[d][l]-O[u-1][l]==0&&X[d][r]-X[u-1][r]==0)ans=max(ans, 1+2*k); } } printf("%d\n",ans); return 0; }
以上是关于Wannafly挑战赛3的主要内容,如果未能解决你的问题,请参考以下文章