Codeforces Round #476 (Div. 2) D. Single-use Stones
D. Single-use Stones
1 2 3 4 5 6 7 8 9 10 11 12 13 | Examples 1: input 10 5 0 0 1 0 2 0 0 1 0 output 3 Examples 2: input 10 3 1 1 1 1 2 1 1 1 1 output 3 |
题意:
1 2 | w表示河的宽度,l表示青蛙所能跳的最远的距离,第二行的w-1个元素表示离河岸为i的地方有a[i]个石头,一 个石头被踩两次,问最多有多少只青蛙可以跳到河对岸 |
分析:
1 2 | 因为最多能跳过几只青蛙,是由落脚点的数目的最小值决定的,所以他的问题实际上就是在[i,i+l],i∈[l,w-1], 最少的石头数目是多少 |
个人代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #define debug #include<stdio.h> #include<math.h> #include<cmath> #include<queue> #include<stack> #include<string> #include<cstring> #include<string.h> #include<algorithm> #include<iostream> #include<vector> #include<functional> #include<iomanip> #include<map> #include<set> #define pb push_back #define dbg(x) cout<<#x<<" = "<<(x)<<endl; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 using namespace std; typedef long long ll; typedef pair< int , int > pii; typedef pair<ll,ll>PLL; typedef pair< int ,ll>Pil; const ll INF = 0x3f3f3f3f; const ll inf=0x7fffffff; const double eps=1e-8; const int maxn =1e6; const int N = 510; const ll mod=1e9+7; const ll MOD=1e9; //------ //define ll sum[maxn]; ll a[maxn]; int w,l; //solve void solve() { while (cin>>w>>l){ ll ans=inf; for ( int i=1;i<w;i++){ cin>>a[i]; sum[i]=sum[i-1]+a[i]; } for ( int i=l;i<=w-1;i++){ ans=min(ans,sum[i]-sum[i-l]); } cout<<ans<<endl; memset (sum,0, sizeof (sum)); } } //main int main() { ios_base::sync_with_stdio( false ); #ifdef debug freopen ( "in.txt" , "r" , stdin); // freopen("out.txt","w",stdout); #endif cin.tie(0); cout.tie(0); solve(); /* #ifdef debug fclose(stdin); fclose(stdout); system("out.txt"); #endif */ return 0; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步