我被killed了!!原本已經AC了......
有沒有哪位大哥,可以提供減少時間的提示
我被killed了!!原本已經AC了......
有沒有哪位大哥,可以提供減少時間的提示
請問你的想法。
我被killed了!!原本已經AC了......
有沒有哪位大哥,可以提供減少時間的提示
請問你的想法。
2個for迴圈,f[i]-f[j]求max
我被killed了!!原本已經AC了......
有沒有哪位大哥,可以提供減少時間的提示
請問你的想法。
2個for迴圈,f[i]-f[j]求max
n <= 100000
我被killed了!!原本已經AC了......
有沒有哪位大哥,可以提供減少時間的提示
請問你的想法。
2個for迴圈,f[i]-f[j]求max
n <= 100000
想不到其他方法,所以求救啊!
因為要求的是 a [ i ] - a[ j ] 盡量大,可想而知前面的數字( a[ i ] ) 越大越好,又因為 i < j ,所以會有個蠻簡單的作法。
因為要求的是 a [ i ] - a[ j ] 盡量大,可想而知前面的數字( a[ i ] ) 越大越好,又因為 i < j ,所以會有個蠻簡單的作法。
請問哪兒有問題,邏輯應該對吧‧...
#include <iostream> using namespace std; int main(int argc, char** argv) { int n; while(cin>>n) { int f[n],max=-1,min=100001,t; for(int i=0;i<n;i++) { cin>>f[i]; } for(int i=0;i<n;i++) { if(f[i]>max) { max=f[i]; t=i; } } for(int i=t;i<n;i++) { if(f[i]<min) { min=f[i]; } } cout<<max-min<<endl; } return 0; }
因為要求的是 a [ i ] - a[ j ] 盡量大,可想而知前面的數字( a[ i ] ) 越大越好,又因為 i < j ,所以會有個蠻簡單的作法。
請問哪兒有問題,邏輯應該對吧‧...
#include using namespace std; int main(int argc, char** argv) { int n; while(cin>>n) { int f[n],max=-1,min=100001,t; for(int i=0;i<n;i++) { cin>>f[i]; } for(int i=0;i<n;i++) { if(f[i]>max) { max=f[i]; t=i; } } for(int i=t;i<n;i++) { if(f[i]<min) { min=f[i]; } } cout<<max-min<<endl; } return 0; }
你的for(int i = 0; i < n; i++)裏面有for (int i = 0; i < n; i++)欸
確定沒問題?
因為要求的是 a [ i ] - a[ j ] 盡量大,可想而知前面的數字( a[ i ] ) 越大越好,又因為 i < j ,所以會有個蠻簡單的作法。
請問哪兒有問題,邏輯應該對吧‧...
#include using namespace std; int main(int argc, char** argv) { int n; while(cin>>n) { int f[n],max=-1,min=100001,t; for(int i=0;i<n;i++) { cin>>f[i]; } for(int i=0;i<n;i++) { if(f[i]>max) { max=f[i]; t=i; } } for(int i=t;i<n;i++) { if(f[i]<min) { min=f[i]; } } cout<<max-min<<endl; } return 0; }
你的for(int i = 0; i < n; i++)裏面有for (int i = 0; i < n; i++)欸
確定沒問題?
#include<cstdio>
#include<algorithm>
using namespace std;
int n,mi,ans;
int main()
{
scanf("%d",&n);
int l[n];
for(int i=0;i<n;i++) scanf("%d",&l[i]);
mi=l[n-1];
ans=l[n-2]-l[n-1];
for(int i=n-2;i>=0;i--)
{
ans=max(ans,l[i]-mi);
mi=min(mi,l[i]);
}
printf("%d\n",ans);
return 0;
}
你可以這樣搞阿,不斷紀錄最小值然後往前算。
因為要求的是 a [ i ] - a[ j ] 盡量大,可想而知前面的數字( a[ i ] ) 越大越好,又因為 i < j ,所以會有個蠻簡單的作法。
請問哪兒有問題,邏輯應該對吧‧...
#include using namespace std; int main(int argc, char** argv) { int n; while(cin>>n) { int f[n],max=-1,min=100001,t; for(int i=0;i<n;i++) { cin>>f[i]; } for(int i=0;i<n;i++) { if(f[i]>max) { max=f[i]; t=i; } } for(int i=t;i<n;i++) { if(f[i]<min) { min=f[i]; } } cout<<max-min<<endl; } return 0; }
你的for(int i = 0; i < n; i++)裏面有for (int i = 0; i < n; i++)欸
確定沒問題?
沒啊,三個for是並列平行的喔!
#include
#include
using namespace std;
int n,mi,ans;
int main()
{
scanf("%d",&n);
int l[n];
for(int i=0;i<n;i++) scanf("%d",&l[i]);
mi=l[n-1];
ans=l[n-2]-l[n-1];
for(int i=n-2;i>=0;i--)
{
ans=max(ans,l[i]-mi);
mi=min(mi,l[i]);
}
printf("%d\n",ans);
return 0;
}
你可以這樣搞阿,不斷紀錄最小值然後往前算。