您的位置:首页 > 其它

Codeforces Round #174 DIV2

2013-03-18 10:55 330 查看
收获了8个hack,本来排名50+,结果C题没有用long long ,错过了一次绝佳的变紫机会...

A题:简单题。快速幂水过。

View Code

/*
Author:Zhaofa Fang
Lang:C++
*/
#include <cstdio>
#include <cstdlib>
#include <sstream>
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string>
#include <utility>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
using namespace std;

typedef long long ll;
#define DEBUG(x) cout<< #x << ':' << x << endl
#define REP(i,n) for(int i=0;i < (n);i++)
#define REPD(i,n) for(int i=(n-1);i >= 0;i--)
#define FOR(i,s,t) for(int i = (s);i <= (t);i++)
#define FORD(i,s,t) for(int i = (s);i >= (t);i--)
#define PII pair<int,int>
#define PB push_back
#define MP make_pair
#define ft first
#define sd second
#define lowbit(x) (x&(-x))
#define INF (1<<30)

#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1

const int maxn = 200011;
ll dp[maxn][2],a[maxn];
int n;
bool vist[maxn][2];
ll dfs(int p,int q){
if(p<=0 || p>n)return 0;
if(p == 1)return -1;
if(vist[p][q])return dp[p][q];
vist[p][q] = 1;
int tmp1;
if(!q)tmp1 = p + a[p];
else tmp1 = p - a[p];
ll tmp2 = dfs(tmp1,q^1);
if(tmp2 == -1)dp[p][q] = -1;
else dp[p][q] = tmp2 + a[p];
return dp[p][q];
}

int main(){
//freopen("in","r",stdin);
//freopen("out","w",stdout);
memset(dp,-1,sizeof(dp));
scanf("%d",&n);
FOR(i,2,n)scanf("%I64d",a+i);
FOR(i,2,n){
if(!vist[i][0])dfs(i,0);
if(!vist[i][1])dfs(i,1);
}
FOR(i,1,n-1)
if(dp[i+1][1] == -1)puts("-1");
else printf("%I64d\n",dp[i+1][1]+i);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: