rt.
本人的代码样例AC,但交上去却是9pts,求大佬提供hack数据
之前已经有大佬 hack 过一次了,但改完还是WA
谢谢
代码:
#include<cstdio>
using namespace std;
typedef long long LL;
const int N=1e5+10;
int c[N],n,T;
LL a[N],m;
int main(){
scanf("%d",&T);
while(T--){
LL ans=0,cnt=0;
scanf("%d%lld",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
c[i]=0;
LL t=a[i];
if(m/a[i]>a[i]){
c[i]=1;
t=m/a[i];
}
if(c[i]==1){
if(m/(m/a[i])>m/a[i]){
c[i]=2;
t=m/(m/a[i]);
}
}
if(c[i]==0){
if(m/(m/a[i])>a[i]){
c[i]=2;
t=m/(m/a[i]);
}
}
ans+=t;
}
for(int i=1;i<=n;i++){
if(a[i]*a[i]==m){
if(c[i-1]==2) c[i]=2;
else if(c[i-1]==1) c[i]=1;
}
}
for(int i=n;i>=1;i--){
if(a[i]*a[i]==m){
if(c[i+1]==2) c[i]=2;
else if(c[i+1]==1&&c[i]==0) c[i]=1;
}
}
for(int i=1;i<=n;i++){
if(c[i]==0&&c[i-1]==2) c[i]=2;
}
for(int i=n;i>=1;i--){
if(c[i]==0&&c[i+1]==2) c[i]=2;
}
int pre=1;
for(int i=1;i<=n;i++){
if(!c[i]){
if(pre!=i) cnt++;
pre=i+1;
}
}
if(pre<n||(pre==n&&c[n]>0)) cnt++;
pre=1;
for(int i=1;i<=n;i++){
if(c[i]<2){
if(pre!=i) cnt++;
pre=i+1;
}
}
if(pre<n||(pre==n&&c[n]==2)) cnt++;
printf("%lld %lld\n",ans,cnt);
}
return 0;
}