网站建设英文字体格式,深圳哪家公司做网站好,云南省工程建设造价协会网站,上海网站建设找思创网络题目描述
某机构举办球票大奖赛。获奖选手有机会赢得若干张球票。
主持人拿出 N 张卡片#xff08;上面写着 1⋯N 的数字#xff09;#xff0c;打乱顺序#xff0c;排成一个圆圈。
你可以从任意一张卡片开始顺时针数数: 1,2,3 ⋯⋯
如果数到的数字刚好和卡片上的数字相…题目描述
某机构举办球票大奖赛。获奖选手有机会赢得若干张球票。
主持人拿出 N 张卡片上面写着 1⋯N 的数字打乱顺序排成一个圆圈。
你可以从任意一张卡片开始顺时针数数: 1,2,3 ⋯⋯
如果数到的数字刚好和卡片上的数字相同则把该卡片收入囊中从下一个卡片重新数数。
直到再无法收获任何卡片游戏结束。囊中卡片数字的和就是赢得球票的张数。
比如
卡片排列是1 2 3
我们从 1 号卡开始数就把 1 号卡拿走。再从 2 号卡开始但数的数字无法与卡片对上很快数字越来越大不可能再拿走卡片了。因此这次我们只赢得了 1 张球票。
还不算太坏如果我们开始就傻傻地从 2 或 3 号卡片数起那就一张卡片都拿不到了。
如果运气好卡片排列是 2 1 3那我们可以顺利拿到所有的卡片
本题的目标已知顺时针卡片序列随便你从哪里开始数求最多能赢多少张球票就是收入囊中的卡片数字之和
输入描述
第一行一个整数 N (≤100N≤100)表示卡片数目。
第二行 N 个整数表示顺时针排列的卡片。
输出描述
输出一行一个整数表示最好情况下能赢得多少张球票。
输入输出样例
示例 输入 3
1 2 3输出 1运行限制
最大运行时间1s最大运行内存: 256M#includebits/stdc.husing namespace std;const int N 1e2 10;int a[N],backup[N];int n 0;int get(int k){int sum 0, cnt 1;//复制backup到a中 memcpy(a,backup,sizeof a);while(true){while(a[k]0){//类似于循环队列 k (k 1) % n;}if(a[k]cnt){suma[k];a[k]0;//重置判断数 cnt 1;}else cnt1;k (k 1) % n;//第一种退出情况 if(cntn) return sum;//第二种退出情况 a[n]全为0 //if(*max_element(a,an)0) return sum;int ss 0;for(int i 0;i n ; i){if(a[i]0) ss;}if(ssn) return sum;}return -1;}int main(){cinn;for(int i 0; i n; i){//backup备份数组 cinbackup[i];}int ans 0;//枚举所有开始位置 for(int i 0; i n; i){ans max(ans,get(i));}coutansendl;return 0;}