新生19场
新生19场
水平太菜,第一遍就ac了的题基本上看一眼就过,这里不参与补题哈哈。
督促自己发一些补题和错了几次的题。
最强大脑:
某卫视台最强大脑节目组利用祖玛游戏设计了一道记珠子的挑战题。
精致细腻的背景,外加神秘的印加音乐衬托,仿佛置身在古老的国度里面,进行一个神秘的游戏。始点的洞口连续滚出m种颜色的n颗珠子,珠子造型美丽,并且有着神秘的色彩。各种颜色的珠子会沿着轨道往前滑动,滚进轨道终点的洞里头,珠子从开始到结束共需t时间,然后再给挑战者1分钟时间思考,回答问题:取一段连续的珠子,每个珠子颜色必须一样,满足条件的最多珠子有几颗?
节目组邀请小W为他们编写一个程序,能快速得出正确的结果。

节目组邀请小W为他们编写一个程序,能快速得出正确的结果。
输入
输入共2行。
第1行包含1个整数n。
第2行包含n颗珠子的颜色,用1至m整数表示,数之间用一个空格隔开
第1行包含1个整数n。
第2行包含n颗珠子的颜色,用1至m整数表示,数之间用一个空格隔开
输出
输出共1行,一个整数。
样例输入 Copy
7
1 2 1 1 1 2 1
样例输出 Copy
3
提示
100%的输入数据保证n≤100000,m≤100000.
题解:求连续最长一样的数,从头到尾遍历,如果一样就t++,如果不一样就让t从头开始,用maxn进行标记出现过的最大的数字(t),最后输出那个最大的
#include<iostream> #include<algorithm> using namespace std; int main(){ int n,maxn=0,a[100010],t; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) { if(a[i]==a[i+1]) t++; else t=0; if(t>maxn) maxn=t; } cout<<maxn+1<<endl; }
好数组:
题目描述
给出一个包含n个元素的数组a[1..n],数组的每一个元素都是正整数。现在首先把a数组从小到大排序,然后观察a数组所有的相邻的两个数,如果存在相邻的两个数的差超过1,那么a数组就是“坏数组”,否则是“好数组”。如果是“好数组”输出“YES”,否则输出“NO”。
输入
多组测试数据。
第一行,一个整数T,表示有T组测试数据。1<=T<=1000。
每组测试数据由2行组成,格式如下:
第一行,一个整数n。 1<=n<=50。
第二行,n个整数,第i个整数是a[i],其中1<=a[i]<=100。
第一行,一个整数T,表示有T组测试数据。1<=T<=1000。
每组测试数据由2行组成,格式如下:
第一行,一个整数n。 1<=n<=50。
第二行,n个整数,第i个整数是a[i],其中1<=a[i]<=100。
输出
共T行,每行一个字符串,"YES"或者"NO"
样例输入 Copy
5
3
2 1 2
4
5 5 5 5
3
4 1 2
4
4 4 1 3
1
100
样例输出 Copy
YES
YES
NO
NO
YES
就按照题目意思来,问题不大
#include<iostream> #include<algorithm> using namespace std; int main(){ int n,a[110]; cin>>n; while(n--) { int m,flat=1; cin>>m; for(int i=0;i<m;i++) cin>>a[i]; sort(a,a+m); for(int i=1;i<m;i++)//读入是从0开始,这里注意不是<=号,刚开始这里犯了错,检查了好久.. { if(a[i]-a[i-1]>1) { flat=0; break; } } if(flat) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
三角形问题:
小W前不久与同学们讨论一些经典二维图形打印问题,现在把一道三角形的拓展问题拿来考考正在学编程的你,不知你能否解决。
这个问题描述如下:
要求:输入一个自然数n,表示行数,如下图为n=9的输出图形。输出n行,其中第一行有n个数字,第二行有n-1个,...,第n行只有一个数字;且第一行第一个为1,以后的走向是从右上到左下,直到这样的走向不能再进行结束。

现在我们把上图所示的上三角形存放到二维数组a中,每个数对应一个固定的位置,比如1存放在a[1,1]单元格里,19存放在a[4,3]单元格里,45存放在a[9,1]单元格里。问题1:已知某单元格里的数,请你马上输出存放它的单元格位置。问题2:已知一个单元格位置,请你马上说出单元格里存放的数。
这个问题描述如下:
要求:输入一个自然数n,表示行数,如下图为n=9的输出图形。输出n行,其中第一行有n个数字,第二行有n-1个,...,第n行只有一个数字;且第一行第一个为1,以后的走向是从右上到左下,直到这样的走向不能再进行结束。

现在我们把上图所示的上三角形存放到二维数组a中,每个数对应一个固定的位置,比如1存放在a[1,1]单元格里,19存放在a[4,3]单元格里,45存放在a[9,1]单元格里。问题1:已知某单元格里的数,请你马上输出存放它的单元格位置。问题2:已知一个单元格位置,请你马上说出单元格里存放的数。
输入
共2行。
第1行是一个整数1或2,分别表示要回答的是问题1还是问题2。
第2行一个整数或两个用空格隔开的整数。
第1行是一个整数1或2,分别表示要回答的是问题1还是问题2。
第2行一个整数或两个用空格隔开的整数。
输出
一行,一个整数或两个用空格隔开的整数。
样例输入 Copy
【样例1】
1
19
【样例2】
2
4 3
样例输出 Copy
【样例1】
4 3
【样例2】
19
提示
100%的输入数据保证n≤5000。
题解:这题我原来不会,思路不是那么明朗,还是看了一位大佬的思路才豁然开朗。原来的我想的又单纯右复杂,哈哈...
其实这题直接将数据储存在二维数组里面,然后暴力去找输出所在的x和y。不过我这个小菜鸡连储存都不会..还是用的循环来做,异想天开,当然不行啦。
看大佬的题解发现用的递推式,找规律然后一行一行去存,当然要存个第一列,好用每第一个去递推,不说,上代码:
#include<iostream> using namespace std; int a[5050][5050]; int main(){ int k=1; for(int i=1;i<=5000;i++) { a[i][1]=a[i-1][1]+k; int t=k; for(int j=2;j<=5000-i+1;j++) { a[i][j]=a[i][j-1]+t; t++; } k++; } int x; cin>>x; if(x==1) { int s; cin>>s; for(int i=1;i<=5000;i++) { for(int j=1;j<=5000;j++) { if(a[i][j]==s) { cout<<i<<" "<<j<<endl; return 0; } } } } else { int i,j; cin>>i>>j; cout<<a[i][j]<<endl; return 0; } }
最小乘积:
题目描述
给定4个整数:a,b,x,y。刚开始a>=x,b>=y。你可以做如下操作不超过n次:
每次你可以选择a或者b,然后让它的值减少1;不过你要保证本次操作之后a的值不能小于x且b的值不能小于y。
问最多n次操作之后,a*b的最小值是多少?
每次你可以选择a或者b,然后让它的值减少1;不过你要保证本次操作之后a的值不能小于x且b的值不能小于y。
问最多n次操作之后,a*b的最小值是多少?
输入
第一行,一个整数T,表示有T组测试数据。
接下来有T行,每行5个整数:a,b,x,y,n。
接下来有T行,每行5个整数:a,b,x,y,n。
输出
共T行,每行一个整数。
样例输入 Copy
7
10 10 8 5 3
12 8 8 7 2
12343 43 4543 39 123212
1000000000 1000000000 1 1 1
1000000000 1000000000 1 1 1000000000
10 11 2 1 5
10 11 9 1 10
样例输出 Copy
70
77
177177
999999999000000000
999999999
55
10
提示
对于100%的数据满足1<=T<=20000,1<=a,b,x,y,n<=109。
#include<iostream> using namespace std; int main(){ int n; cin>>n; while(n--) { long long int a,b,x,y,n,sum,sum1,minn; cin>>a>>b>>x>>y>>n; if(a-x+b-y<n) cout<<x*y<<endl; else { if(a-n>=x) { sum=(a-n)*b; } else if(a-n<x) { sum=x*(b-n+a-x); } if(b-n>=y) { sum1=a*(b-n); } else { sum1=y*(a-n+b-y); } minn=sum<sum1?sum:sum1; cout<<minn<<endl; } } return 0; }
这个题单纯的模拟,怎么想的怎么来,不过要注意一组数据(如果是正常算是负的情况),那就直接x*y就好啦,这个为什么要参与补题呢,被吓到了哈哈。
数字和:
题目描述
给定一个整数n,每次操作你能让n的值增加1。问至少需要多少次操作才能使得整数n的各位数字之和不超过s?
输入
第一行,一个整数T,表示有T组测试数据。
接下来有T行,每行2个整数n和s。
接下来有T行,每行2个整数n和s。
输出
共T行,每行一个整数,表示至少需要多少次操作才能使得整数n的各位数字之和不超过s。
样例输入 Copy
5
2 1
1 1
500 4
217871987498122 10
100000000000000001 1
样例输出 Copy
8
0
500
2128012501878
899999999999999999
提示
对于100%的数据满足:1≤T≤20000,1≤n≤1018。 1≤s≤162。
这题也是看一位大佬的代码,我很奇怪,为什么新设置变量进行操作减去原来的那个数和这个方法有什么不同,答案居然不一样,奇怪了。
这个题刚开始的while循环没看懂哈哈,后来检举了一些例子讲一下自己个人的看法哈:
65比如这个数字,数字和已经11了,如果不停的加一判断,这个很难操作啊,需要进位等等,而且有超时的问题,但如果加一只会在本身的数字和上面加一,并不能起到减少的效果,那怎么
减少呢:就是在进位的时候,逢十进一,逢百进一等等,这样直接将数字和变成1?因为求的是至少的操作,到进位这可以break了哈哈,最后求的是n,用n减去原来的b(b=n)之前声明过,就是
所加的数字了,还是那个问题,为什么我不能对新定义的变量操作,呜呜呜。
哦对,这题数据很大,必须每一个都用long long int来存储。
#include<iostream> using namespace std; typedef long long int LL; LL sum(LL n) { LL ans=0; while(n>0) { ans=ans+n%10; n/=10; } return ans; } int main(){ LL t,n,s; scanf("%lld",&t); while(t--) { scanf("%lld%lld",&n,&s); LL a=10,b=n; while(sum(n)>s){ n+=a-n%a; a*=10; } cout<<n-b<<endl; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具