2018年东北农业大学春季校赛 wyh的矩阵
链接:https://www.nowcoder.com/acm/contest/93/H
来源:牛客网
题目描述
最近吃鸡游戏非常火,你们wyh学长也在玩这款游戏,这款游戏有一个非常重要的过程,就是要跑到安全区内,否则就会中毒持续消耗血量,我们这个问题简化如下
假设地图为n*n的一个图,图中有且仅有一块X的联通快代表安全区域,有一个起点S代表缩圈的时候的起点,图中C代表的是车(保证车的数量小于等于100),标记为.的代表空地,可以任意通过,O代表障碍物不能通过。每次没有车的时候2s可以走一个格(只能走自己的上下左右4个方向),有车的话时间为1s走一个格
现在告诉你最多能坚持的时间为t秒,问你在t秒内(含t秒)能否从s点到达安全区域,能的话输出YES,并且输出最短时间,不能的话输出NO
输入描述:
输入第一行一个整数T(1<=T<=10)
接下来有T组测试数据,每组测试数据输入2个数n和k(1<=n<=100,1<=k<=10^9)
接下来n行,每行n个字符,代表对应的n*n的地图,每个字符都是上面的一种,并且保证只有一个起点,只有一块安全区域。
输出描述:
对于每组测试数据,先输出能否到达,能的话输出YES,然后换行输出最短时间,如果不能的话直接输出NO
示例1
输入
3 2 3 .X S. 2 3 .X SC 2 4 .X S.
输出
NO YES 3 YES 4
#include<iostream> using namespace std; #include<cstdio> #include<cstring> #include<cstdlib> typedef long long ll; void deal(){ ll n; cin>>n; ll p = n/2+1; ll q = n; ll sum = 0; sum = ((p+(p+n*(n-1)))*q)/2; // cout<<"*"<<sum<<endl; for(int i=n/2;i>=1;i--){ p+=(n-1); q-=2; // cout<<p<<" "<<q<<" "<<p+n*(q-1)<<endl; sum+=((p+(p+n*(q-1)))*q)/2; } p = n/2+1,q=n; for(int i=n/2+2;i<=n;i++){ p+=(n+1); q-=2; // cout<<p<<" "<<q<<" "<<p+n*(q-1)<<endl; sum+=((p+(p+n*(q-1)))*q)/2; } cout<<sum<<endl; } int main(){ int t; scanf("%d",&t); while(t--) deal(); return 0; }