AOJ0549

問題
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0549
コード

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
#include <sstream>
#include <iostream>
#include <cassert>
#include <fstream>
#include<math.h>

#define FOR(i,k,n) for (int i=(k); i<(int)(n); ++i)
#define REP(i,n) FOR(i,0,n)
#define FORIT(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)
#define sz size()
#define lgt length()
#define pb push_back
#define mp make_pair
#define ALL(X) (X).begin(),(X).end()
#define SORT(a) sort(ALL(a));

using namespace std;

typedef pair<int,int> pint;
typedef vector<int> vi;
typedef vector<string> vs;
typedef vector<vi> vvi;



int toInt(string s){int v;istringstream sin(s);sin>>v;return v;}
double toDouble(string s){double v;istringstream sin(s);sin>>v;return v;}
template<class T>string toString(T x){ostringstream sout;sout<<x;return sout.str();}
vs form(string a,char s){a+=s;vs v;string b;REP(i,a.lgt){if(a[i]==s){v.pb(b);b="";}else b+=a[i];}return v;}
vi formint(string a,char s){a+=s;vi v;string b;REP(i,a.lgt){if(a[i]==s){v.pb(toInt(b));b="";}else b+=a[i];}return v;}
int main(){
	long long n,m;
	cin >> n >> m;
	vector<long long> load;
	REP(i,n){
		if(i==0){
			load.push_back(0);
		}
		else {
			int in;
			cin >> in;
			load.push_back(load[i-1]+in);
			//cout << load[i] << endl;
		}
	}
	//宿場はa[0]を0とした相対距離になっている
	//配列のINDEXがずれていることに注意
	long long  cunt = 0;
	long long  now = 0;
	REP(i,m){
		long long  tmp;
		cin >> tmp;
			if(tmp<0){
				cunt += ((load[now])%100000-(load[now+tmp])%100000);
				//cout << cunt << endl;
				now += tmp%100000;
			}
			else {
				cunt += ((load[tmp+now])%100000 - (load[now]%100000));
				//cout << cunt << endl;
				now += tmp%100000;
			}
	}
	cout << cunt%100000 << endl;
	

return 0;
}

無駄にmod取ってるけどあんまりスマートじゃないなぁ
なんか最初intにしていて全然通らなかったのでlong longにして、なんかちょこちょこいじったら通った
よく考えると通る前のコードを書いてないとどこがわるかったかわからないなぁ
反省。