問題
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にして、なんかちょこちょこいじったら通った
よく考えると通る前のコードを書いてないとどこがわるかったかわからないなぁ
反省。