E. Singers‘ Tour---推导数学

题目链接

在这里插入图片描述

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const string YES = "YES\n",NO = "NO\n";
#define int long long 
const int N = 40010,mod = 1e9+7;
int a[N],b[N];
void solve()
{
	int n;cin>>n;
	int sum=0;
	for(int i=1;i<=n;i++)cin>>b[i],sum+=b[i];
	b[0]=b[n];
	
	if((sum*2)%(n*(n+1))){cout<<NO;return ;}
	sum=sum*2/(n*(n+1));
	
	int t=0;
	for(int i=1;i<=n;i++)
		a[i]=(b[i-1]-b[i]+sum)/n,t+=a[i];
	
	bool f=false;
	for(int i=1;i<=n;i++)if(a[i]<1||a[i]>1e9)f=true;
	if(f||t!=sum){cout<<NO;return ;}
	
	cout<<YES;
	for(int i=1;i<=n;i++)cout<<a[i]<<" ";
	cout<<'\n';
}
signed main()
{		
	int T;cin>>T;
	while(T--)solve();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
/* * 程序名称:歌手比赛系统 * 程序作者:XXX * 编写时间:20XX年XX月XX日 * 版权声明:本程序版权归作者所有,仅供学习交流使用,禁止商业化利用。 */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* 定义常量 */ #define MAX_SINGER 100 // 参赛歌手最大数量 #define MAX_NAME_LENGTH 20 // 歌手姓名最大长度 /* 定义结构体 */ struct Singer { char name[MAX_NAME_LENGTH]; // 歌手姓名 int score; // 歌手得分 }; /* 函数声明 */ void menu(); // 显示菜单 void addSinger(struct Singer singers[], int *count); // 添加歌手 void showSingers(struct Singer singers[], int count); // 显示所有歌手信息 void vote(struct Singer singers[], int count); // 投票 void sortSingers(struct Singer singers[], int count); // 根据得分排序歌手 /* 主函数 */ int main() { struct Singer singers[MAX_SINGER]; // 参赛歌手数组 int count = 0; // 参赛歌手数量 while (1) { menu(); // 显示菜单 int choice; scanf("%d", &choice); switch (choice) { case 1: addSinger(singers, &count); break; case 2: showSingers(singers, count); break; case 3: vote(singers, count); break; case 4: sortSingers(singers, count); break; case 5: exit(0); default: printf("无效的选项,请重新输入\n"); break; } } return 0; } /* 显示菜单 */ void menu() { printf("**********欢迎来到歌手比赛系统**********\n"); printf("1.添加歌手\n"); printf("2.显示所有歌手信息\n"); printf("3.投票\n"); printf("4.根据得分排序歌手\n"); printf("5.退出系统\n"); printf("请输入选项:"); } /* 添加歌手 */ void addSinger(struct Singer singers[], int *count) { if (*count >= MAX_SINGER) { printf("已达到最大参赛人数!\n"); return; } struct Singer newSinger; printf("请输入歌手姓名:"); scanf("%s", newSinger.name); newSinger.score = 0; singers[*count] = newSinger; *count += 1; printf("添加成功!\n"); } /* 显示所有歌手信息 */ void showSingers(struct Singer singers[], int count) { printf("所有参赛歌手信息如下:\n"); for (int i = 0; i < count; i++) { printf("姓名:%s,得分:%d\n", singers[i].name, singers[i].score); } } /* 投票 */ void vote(struct Singer singers[], int count) { printf("请输入您要投票的歌手姓名:"); char name[MAX_NAME_LENGTH]; scanf("%s", name); for (int i = 0; i < count; i++) { if (strcmp(singers[i].name, name) == 0) { singers[i].score += 1; printf("投票成功!\n"); return; } } printf("未找到该歌手,请重新输入\n"); } /* 根据得分排序歌手 */ void sortSingers(struct Singer singers[], int count) { for (int i = 0; i < count - 1; i++) { for (int j = 0; j < count - i - 1; j++) { if (singers[j].score < singers[j + 1].score) { struct Singer temp = singers[j]; singers[j] = singers[j + 1]; singers[j + 1] = temp; } } } printf("根据得分排序后的歌手信息如下:\n"); for (int i = 0; i < count; i++) { printf("姓名:%s,得分:%d\n", singers[i].name, singers[i].score); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_WAWA鱼_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值