Kelt:这个代码有问题哦,试试样例5,4,3,2,1
投递字节跳动等公司10个岗位 >
0 点赞 评论 收藏
分享
2021-05-22 20:19
卡内基·梅隆大学 Java 0 点赞 评论 收藏
分享
2021-05-03 17:10
卡内基·梅隆大学 Java 0 点赞 评论 收藏
分享
投递北京创新乐知信息技术有限公司等公司10个岗位 >
0 点赞 评论 收藏
分享
牛客549486156号:def solution():
string = input("")
pattern = input("")
start = int(input(""))
m,n = len(string),len(pattern)
locations = defaultdict(Letter)
if string[start] == pattern[0]:
pattern = pattern[1:] #一开始就匹配成功这种情况纯粹是捣乱的,会导致后边使用bisect_right错误,也就是需要考虑当前的p的位置也算数,但是除了第一个点,当前位置的p都是上一次的结果,所以不算数
ans = -start
投递华为等公司10个岗位 >
0 点赞 评论 收藏
分享
thyxsl:我参加了第12场,编程题更简单, 因式分解🤣
投递兴业数金等公司10个岗位 >
0 点赞 评论 收藏
分享
Yexiaomo:老哥收到群面通知了吗?
0 点赞 评论 收藏
分享
投递网易等公司10个岗位 >
0 点赞 评论 收藏
分享
投递耀乘健康等公司10个岗位 >
0 点赞 评论 收藏
分享
F21H_:我事后想了一下,double被卡精度应该是过程中加到了一个比较大的数,double用了很多位去表示整数部分。办法就是利用一个long long去模拟,由于没有负数还可以是unsigned的,等于完整利用上了64位精度。具体操作就是在每次加上去前 *N,N是一个合适的较大值,最后再除掉,这样模拟了一个固定阶数的小数。代码放在下面,没有仔细调输出,并且也不能保证能ac,毕竟我没办法再测试了。另一种思路就是每次都将整数部分提取出来放到一个int里,这样double可以完整保留小数部分的精度。
#include<bits/stdc++.h>
using namespace std;
unsigned long long N=10000000000;
unsigned long long M=N/10000;
int main()
{
int n=10000;
unsigned long long sum=0;
if(n==1){
printf("1.0000\n");
return 0;
}
for(int i=1; i<=n-1; i++){
int j=n-i;
if(abs(i-j)<2){
sum = sum + N*max(i,j);
}else{
sum = sum + N*min(i,j);
int k=abs(i-j);
unsigned long long temp=0;
for(int t=1; t<=k-1; t++){
temp = temp + N*max(t, k-t);
}
sum = sum + temp/(k-1);
}
}
unsigned long long res = sum/(n-1);
double ret = res/N + res%N/M;
if(res%N/M==0) printf("%.4lf\n", ret);
else printf("%d.%d\n", res/N, res%N/M);
}
投递阿里巴巴等公司10个岗位 >
0 点赞 评论 收藏
分享
关注他的用户也关注了: