题目大意
有1024元钱 输入你花掉的数目问找回的硬币数最小
有64 16 4 1 的硬币
水题 代码没存 Pycharm可以恢复真是太强了
整数除硬币面额 再求和
-
n=input()
-
n=int(n)
-
n=
1024-n
-
ans=
0
-
ans+=n//
64
-
n-=
64*(n//
64)
-
ans+=n//
16
-
n-=
16*(n//
16)
-
ans+=n//
4
-
ans+=(n
-4*(n//
4))
-
print(ans)
-
#第二题
题目大意
在字符串中有连续的三个字母要去掉一个
有连续的AABB型的 要去掉第二对中的一个字母 即AAB
匹配顺序是从左到右例如AABBCC 结果为AABCC
保存在电脑上的代码好像是AC的那一版
-
n=input()
-
n=int(n)
-
for _
in range(
0,n):
-
line=input()
-
line=list(line)
-
i=
0
-
while i<len(line)
-2:
-
if(i<len(line)
-2):
-
if(line[i]==line[i+
1]==line[i+
2]):
-
del(line[i+
2])
-
i-=
1
-
if(i<len(line)
-3):
-
if(line[i]==line[i+
1]
and line[i+
2]==line[i+
3]):
-
del(line[i+
3])
-
i-=
1
-
i+=
1
-
print(
''.join(line))
#第三题
题目大意
有n个人 围成一圈每个人都有自己的分数
规定
1.当前人的分数如果大于左右人的分数
那么也要比左右人获得更多的礼物
2.每人至少有一个礼物
求礼物数最小
有一组样例
2
5
1 2 3 4 5
5
5 4 3 2 1
结果都是15
错误解法:(待填坑) 已填
-
#include <iostream>
-
#include <cstdio>
-
#include <math.h>
-
#include<algorithm>
-
#include<cstring>
-
using
namespace
std;
-
int xx[
100005];
-
int cc[
100005];
-
int main()
-
{
-
int t;
-
cin>>t;
-
while(t--)
-
{
-
int n;
-
cin>>n;
-
int minn=
10000000;
-
int mini;
-
int cnt=
0;
-
for(
int i=
0; i<n; i++)
-
{
-
scanf(
"%d",&xx[i]);
-
if(xx[i]<minn)
-
{
-
minn=xx[i];
-
mini=i;
-
}
-
}
-
if(n==
1)
-
cout<<
1<<
endl;
-
else
if(n==
2)
-
{
-
if(xx[
0]!=xx[
1])
-
cout<<
3<<
endl;
-
else
-
cout<<
2<<
endl;
-
}
-
else
-
{
-
memset(cc,
0,
sizeof(cc));
-
long
long ans1=
0;
-
int minii=mini;
-
cc[mini]=
1;
-
cnt=
1;
-
ans1+=
1;
-
while(cnt<=n
-1)
//顺时针
-
{
-
mini+=
1;
-
mini%=n;
-
if(xx[(mini
-1+n)%n]<xx[mini] && xx[mini]>xx[(mini+
1)%n] )
-
cc[mini]=max(cc[(mini
-1+n)%n],cc[(mini+
1)%n])+
1;
-
else
if(xx[(mini
-1+n)%n]<xx[mini] )
-
cc[mini]=cc[(mini
-1+n)%n]+
1;
-
else
if(xx[mini]>xx[(mini+
1)%n])
-
cc[mini]=cc[(mini+
1)%n]+
1;
-
if(cc[mini]==
0)
-
cc[mini]=
1;
-
cnt++;
-
// cout<<mini<<" "<<cc[mini]<<endl;
-
ans1+=cc[mini];
-
}
-
memset(cc,
0,
sizeof(cc));
-
long
long ans2=
0;
-
mini=minii;
-
cc[mini]=
1;
-
cnt=
1;
-
ans2+=
1;
-
while(cnt<=n
-1)
//逆时针
-
{
-
mini-=
1;
-
if(mini<
0)
-
mini+=n;
-
mini%=n;
-
if(xx[(mini
-1+n)%n]<xx[mini] && xx[mini]>xx[(mini+
1)%n] )
-
cc[mini]=max(cc[(mini
-1+n)%n],cc[(mini+
1)%n])+
1;
-
else
if(xx[(mini
-1+n)%n]<xx[mini] )
-
cc[mini]=cc[(mini
-1+n)%n]+
1;
-
else
if(xx[mini]>xx[(mini+
1)%n])
-
cc[mini]=cc[(mini+
1)%n]+
1;
-
if(cc[mini]==
0)
-
cc[mini]=
1;
-
cnt++;
-
// cout<<mini<<" "<<cc[mini]<<endl;
-
ans2+=cc[mini];
-
}
-
cout<<max(ans1,ans2)<<
endl;
-
}
-
}
-
return
0;
-
}
#第四题
题目大意
有n根长度为Li的绳子
需要m根相同长度的绳子
问最大的相同长度是多少 二分裸题 精度一开始开了1e-5 改了1e-4过了
-
#include <iostream>
-
#include <cstdio>
-
#include <math.h>
-
#include<algorithm>
-
using
namespace
std;
-
int c[
100005];
-
int main()
-
{
-
long
long n,m;
-
cin>>n>>m;
-
long
long sum=
0;
-
for(
int i=
0;i<n;i++)
-
{
-
cin>>c[i];
-
sum+=c[i];
-
}
-
if(sum<m)
-
cout<<
"0.00"<<
endl;
-
else
-
{
-
double l,r,mid;
-
l=
0,r=
1000000009;
-
long
long cnt=
0;
-
while((r-l)>
1e-4)
-
{
-
mid=(l+r)/
2;
-
cnt=
0;
-
for(
int i=
0;i<n;i++)
-
{
-
cnt+=
int(c[i]/mid);
-
}
-
// cout<<cnt<<endl;
-
if(cnt<m)
-
r=mid;
-
else
-
l=mid;
-
}
-
printf(
"%.2lf\n",mid);
-
}
-
return
0;
-
}