upc第十一场2020.11.30
作者:互联网
问题 A: 约数
时间限制: 1 Sec 内存限制: 512 MB
题目描述
对于一个正整数n,如果n除以某个正整数d所得的余数为0,我们称d是n的约数。显然1和n一定是n的约数,请问对于给定的n(n≥2),除了n本身以外,最大的约数是多少?
输入
共一行,包含一个正整数n。
输出
共一行,包含一个正整数,表示n除了自身以外的最大约数。
样例输入 Copy
15
样例输出 Copy
5
提示
15的约数有1,3,5,15,除了15本身以外的最大约数为5。
对于30%的数据,n≤100;
对于50%的数据,n≤106;
对于100%的数据,2≤n≤2×109 。
思路:求最小的约数,然后与原数相除即为最大约数
#include<bits/stdc++.h>
using namespace std;
long long n,i,r;
int main()
{
scanf("%lld",&n);
for(i=2;i<n;i++)
{
if(i!=n&&n%i==0)
{
r=i;
break;
}
}
printf("%d",n/r);
return 0;
}
问题 B: HD阶乘
时间限制: 1 Sec 内存限制: 128 MB
题目描述
n的阶乘定义为n! = n ∗ (n − 1) ∗ (n − 2) ∗ … ∗ 1。
n的双阶乘定义为n!! = n ∗ (n − 2) ∗ (n − 4) ∗ … ∗ 2或n!! = n∗ (n − 2) ∗ (n − 4) ∗ … ∗ 1,取决于n的奇偶性。
但是阶乘的增长速度太快了,所以我们现在只想知道n!和n!!末尾的0的个数。
输入
一个正整数n, n ≤ 107
输出
两个整数, 分别为n!和n!!末尾0的个数。
样例输入 Copy
10
样例输出 Copy
2 1
提示
10! = 3628800, 10!! = 10 ∗ 8 ∗ 6 ∗ 4 ∗ 2 = 3840
这题现在我也不是很理解,不过就是:
阶乘尾部出现的零就是5和偶数相乘的结果,在n阶乘中,偶数的个数要比5个数多得多,所以尾部零的个数就为多少个5相乘的个数(10看做2x5即一个5,25看做两个5…)。
在求n!!的时候,如果n为奇数,则都是奇数相乘,而奇数相乘的结果必然为奇数,奇数的末尾不可能有0,所以这种情况下输出0即可。如果n为偶数,则都是偶数相乘,那结果必然为偶数,末尾就可能有0,需要进行计算判断。其中双阶乘的末尾的0的出现通过两种方式,第一种当n<50时,主要是通过10的倍数,第二种当n>=50时,这个时候数字当中出现5,有10的倍数的原因,也有5*偶数的原因。
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,ans1=0,ans2=0,t1,t2,p,x1,x2;
scanf("%lld",&n);
t1=n;
t2=n;
x1=5;x2=10;p=5;
while(t1/x1)//直到/5的倍数为0时停
{
ans1+=t1/x1;//累加出现5的个数
x1*=p; //每次*5
}
if(n%2==0)
{ while(t2/x2)//直到/10的倍数为0时停
{
ans2+=t2/x2;// 累加出现10的个数
x2*=p;//每次*5
}
}
else
ans2=0;//当n为奇数时那绝对不会出现0
printf("%lld %lld",ans1,ans2);
return 0;
}
问题 C: HD序列
时间限制: 1 Sec 内存限制: 128 MB
题目描述
小Z手上有一个长度为n的整数序列a1, a2,…,an,但是他不太喜欢这个序列,因此他想通过一些操作将序列a变成自己想要的序列b。初始时序列b是空的,接下来小Z将依次进行n次操作,其中第i次操作分为以下两步:
- 将ai加到序列b的尾部;
- 翻转序列b(即b1,b2,…,bi变成bi,bi-1,…,b1 )。
小Z想知道n次操作之后序列b会是什么样的,你能帮助他吗?
输入
第一行包含一个正整数n;
第二行包含n个正整数,第i个正整数表示ai。
输出
共一行,包含n个数,表示n次操作后的序列b。
样例输入 Copy
4
1 2 3 4
样例输出 Copy
4 2 1 3
提示
每次操作后序列b如下:
●1
●2,1
●3,1,2
●4,2,1,3
【数据范围】
对于20%的数据,n≤100;
对于50%的数据,n≤1000;
对于100%的数据,1≤n≤2×105,0≤ai≤109。
写几个数列找规律即可,首先对n进行奇偶分类
#include<bits/stdc++.h>
using namespace std;
long long n,a[200001];
int main()
{ long long i;
scanf("%lld",&n);
for(i=1;i<=n;i++)
scanf("%lld",&a[i]);
if(n%2==0)
{
for(i=n;i>=2;i=i-2)
printf("%lld ",a[i]);
for(i=1;i<=n-1;i+=2)
printf("%lld ",a[i]);
}
else
{
for(i=n;i>=1;i-=2)
printf("%lld ",a[i]);
for(i=2;i<=n-1;i+=2)
printf("%lld ",a[i]);
}
return 0;
}
问题 D: HD糖果
时间限制: 1 Sec 内存限制: 128 MB
题目描述
小民是一个很喜欢吃糖果的小孩子,他给所有的糖果进行了分类,有A~Z一 共26种糖果,现在小民有一排糖果,小民很奇怪,吃糖果只喜欢吃连续的若干个 ,并且不希望吃到相同分类的糖果。现在小民让你帮他计算一下L的最大值,使得他的一排糖果中的***任意连续L个糖果都不会有相同的分类。***
输入
输入仅一行,一行由大写字母组成的字符串,代表小民的一排糖果。
输出
输出仅一行,输出L的最大值。如果一排糖果都没有相同的,请输出−1。
样例输入 Copy
ABABABABABAB
样例输出 Copy
2
提示
令字符串的长度为N
对于20%的数据:1≤N≤100;
对于50%的数据:1≤N≤1000;
对于70%的数据:1≤N≤10000;
对于100%的数据:1≤N≤10000000。
#include<bits/stdc++.h>
using namespace std;
long long ans,v[10000001],len;
char s[10000001],flag=1;
int main()
{
scanf("%s",s+1);
len=strlen(s+1);
for(int i=1;i<=len;i++)
{
int u=s[i]-'A'+1;
if(v[u])
{ ans=min(ans,i-v[u]);
flag=0;
}
if(flag==1) ans++;
v[u]=i;
}
if(ans==len) printf("-1\n");
else printf("%lld\n",ans);
return 0;
}
问题 G: 数一数
时间限制: 1 Sec 内存限制: 128 MB
题目描述
星期天早上,小明开始做数学家庭作业。因为小明成绩很优异,觉得题目太简单了,思考出道难点的数学题去学校考考同学,他注意到:数学书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。
哈哈,题目有了,请问数学书的第x页到第y页共有多少张纸呢?
例如:该书的第81页到第92页,共有7张纸。
输入
一行两个数x、y如题所述,用空格隔开。
输出
一个数,表示纸张数。
样例输入 Copy
81 92
样例输出 Copy
7
提示
50%:0<y-x<=15;
100%:1<=x,y<=longint;0<y-x<longint。
问题 H: 博物馆
时间限制: 1 Sec 内存限制: 128 MB
题目描述
从前,有一个偌大的博物馆,每天都会有数以万计的人们来参观,欣赏这里的艺术作品。这一天,博物馆来了N批人,第i批人有Ai个人以及一个导游组成,他们依次到达,但同时也有一些批次的人离开,由于人次太多,博物馆的管理人员递给你一些人数表,就请你来统计一下剩下多少人。
输入
第一行是个整数N,接下来N行。每行两个数,第一个数X,如果X=0则后面接一个数Ai,表示来了Ai个人;如果X=1,那么接下来就有一个数Y,表示来的人中的第Y批离开了。
输出
一个数,表示剩下多少人。
样例输入 Copy
6
0 5
0 6
1 1
0 7
0 8
1 3
样例输出 Copy
16
提示
有四批人,每批人要加上一位导游,分别是6,7,8,9人,离开的是第1和3批,即走了6+8=14人,剩7+9=16人。
对于30%的数据,1≤N≤100,1≤Ai≤1000;
对于100%的数据,1≤N≤1000000,1≤Ai≤1000000。
保证:X只为0或1,Y一定符合要求。
问题 I: 旅游III
时间限制: 1 Sec 内存限制: 128 MB
题目描述
Lanlan的好朋友Qiqi来到了东莞,她决定带Qiqi去东莞的名胜景区旅游,以此增进友谊。但Qiqi不喜欢去拥挤度大于k的景点,而且旅游的时间不能是断开的。Lanlan现在知道了明天n个连续时间景区的拥挤度,她想知道她最多能陪Qiqi旅游多久。
输入
第一行两个整数n,k。
第二行有n个整数表示每个时间的拥挤程度(数值小于1000)。
输出
一个整数表示Lanlan最多能陪Qiqi的时间。
样例输入 Copy
20 2
1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
样例输出 Copy
16
提示
60%的数据 N<=1000
100%的数据 N<=100000
标签:约数,输出,10,30,样例,upc,long,2020.11,Copy 来源: https://blog.csdn.net/qq_51235689/article/details/110410769