C-攻城_第十九届同济大学程序设计竞赛暨高校网络友谊赛 (nowcoder.com)
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
Rolnan城有 n(0≤n≤105)n(0leq n leq 10^5)n(0≤n≤105) 个堡垒,每个堡垒有生命值 hi(1≤hi≤109)h_i(1leq h_i leq 10^9)hi(1≤hi≤109),当堡垒的生命值变为0,它将被摧毁,LiuGod可以使用魔法打击这些堡垒。
LiuGod的每次魔法可以对任意一个堡垒造成1点伤害;特别的,由于LiuGod很崇拜 `clearlove7` ,他的每第 7 次魔法(7/14/21/...)会对所有的堡垒造成1点伤害。
现在LiuGod为了彻底打击Rolnan,决定要在最后一次打击中一次性全部摧毁Rolnan城的堡垒,现在他想询问能不能完成。
注意,每次打击都必须完成;同时要保证每个堡垒只在最后一次打击中被摧毁。
第一行一个整数 T(1≤T≤103)T(1leq Tleq 10^3)T(1≤T≤103),表示数据组数。 接下来每组数据,第一行一个整数 nnn,接下来一行 nnn 个整数表示 h1,h2,…,hnh_1,h_2,dots,h_nh1,h2,…,hn。 保证 ∑n≤106sum nleq 10^6∑n≤106。输出描述:
对于每组数据,输出"YES"或"NO",表示能否达到LiuGod的要求。
示例1
输入复制3 3 3 2 4 4 1 1 1 1 3 10 1 7
3 3 3 2 4 4 1 1 1 1 3 10 1 7输出
复制YES NO NO
YES NO NO备注:
n=0视为直接完成了任务
@@@@@@@@@****************
刚看题目的时候觉得很简单,但是前面wa的八次感觉都没有理解好题,一直都和七想到一起,对七整除和取模,后面看了题解之后,原来不是,是这样的,因为遇到是七的整除的数,.可以按一整个轮回求,每一轮就是(n+6),只要最后的总和是(n+6)的倍数,并且最小的那个数大于减去的总次数就就可以了,但是要n是0或1的时候要特判,要记得初始化
********************@@@@@@@@
#include#include using namespace std; typedef long long ll; const int N=1e5+10; ll a[N]; ll n,b,t; ll sum; int main(){ int i; scanf("%lld",&t); while(t--) { ll m=2e9; scanf("%lld",&n); sum=0; for(i=1;i<=n;i++) { scanf("%lld",&a[i]); sum=sum+a[i]; m=min(m,a[i]); } if(n<=1) { puts("YES"); continue; } if(sum%(n+6)==0&&m>=sum/(n+6)) puts("YES"); else puts("NO"); } return 0; }



