Submission #1214499


Source Code Expand

#include <algorithm>  
#include <iostream>  
#include <sstream>  
#include <string>  
#include <cstring>
#include <vector>  
#include <queue>  
#include <set>  
#include <map>  
#include <cstdio>  
#include <cstdlib>  
#include <cctype>  
#include <cmath>  
#include <list>  
#include <cassert>
#include <ctime>
#include <climits>
using namespace std;  

#define PB push_back  
#define MP make_pair  
#define SZ(v) ((int)(v).size())  
#define FOR(i,a,b) for(int i=(a);i<(b);++i)  
#define REP(i,n) FOR(i,0,n)  
#define FORE(i,a,b) for(int i=(a);i<=(b);++i)  
#define REPE(i,n) FORE(i,0,n)  
#define FORSZ(i,a,v) FOR(i,a,SZ(v))  
#define REPSZ(i,v) REP(i,SZ(v))  
typedef long long ll;
typedef unsigned long long ull;
ll gcd(ll a,ll b) { return b==0?a:gcd(b,a%b); }

const int MAXFIX=2500;
const int MAXWANT=2500;
const int MAXGAP=10000;
const int MOD=1000000007;

int n,nfix,want;
int fix[MAXFIX];

int ways[MAXWANT+1][MAXGAP+1]; // ways[i][j] = ways to put stops in a segment of length j so that everyone can reach the first or last in i steps
int ways1[MAXWANT+1][MAXGAP+1]; // ways1[i][j] = ways to put stops in a segment of length j so that everyone can reach the first in i steps or the last in i-1 steps

int tsum1[MAXGAP+2];
int tsum2[MAXGAP+2];

void run() {
	scanf("%d%d%d",&n,&nfix,&want); REP(i,nfix) scanf("%d",&fix[i]);
	int mxgap=0; REP(i,nfix-1) mxgap=max(mxgap,fix[i+1]-fix[i]);
	REPE(i,MAXWANT) {
		if(i>0) { tsum1[0]=0; REPE(k,MAXGAP) tsum1[k+1]=(tsum1[k]+ways[i-1][k])%MOD; }
		FORE(j,1,MAXGAP) {
			int l=1,r=min(j-1,2*i);
			if(j-(i+1)<=i-1) ++ways1[i][j];
			if(i>0&&l<=r) ways1[i][j]=(ways1[i][j]+tsum1[j-l+1]+MOD-tsum1[j-r])%MOD;
		}
		{ tsum2[0]=0; REPE(k,MAXGAP) tsum2[k+1]=(tsum2[k]+ways1[i][k])%MOD; }
		FORE(j,1,MAXGAP) {
			int l=1,r=min(j-1,2*i);
			if(j-(i+1)<=i) ++ways[i][j];
			if(l<=r) ways[i][j]=(ways[i][j]+tsum2[j-l+1]+MOD-tsum2[j-r])%MOD;
		}
	}
	//REPE(i,want) { printf("%d:",i); FORE(j,1,mxgap) printf(" %d",ways1[i][j]); puts(""); }
	//REPE(i,want) { printf("%d:",i); FORE(j,1,mxgap) printf(" %d",ways[i][j]); puts(""); }
	int ret=1;
	REP(i,nfix-1) ret=(ll)ret*ways1[want-i][fix[i+1]-fix[i]]%MOD;
	printf("%d\n",ret);
}

int main() {
	run();
	return 0;
}

Submission Info

Submission Time
Task E - Enormous Atcoder Railroad
User krijgertje
Language C++14 (GCC 5.4.1)
Score 1000
Code Size 2272 Byte
Status AC
Exec Time 390 ms
Memory 195712 KB

Compile Error

./Main.cpp: In function ‘void run()’:
./Main.cpp:48:32: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d",&n,&nfix,&want); REP(i,nfix) scanf("%d",&fix[i]);
                                ^
./Main.cpp:48:65: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d",&n,&nfix,&want); REP(i,nfix) scanf("%d",&fix[i]);
                                                                 ^

Judge Result

Set Name Subtask1 Subtask2 Subtask3 Subtask4 Subtask5
Score / Max Score 120 / 120 90 / 90 260 / 260 160 / 160 370 / 370
Status
AC × 3
AC × 6
AC × 9
AC × 12
AC × 15
Set Name Test Cases
Subtask1 sub1_in1.txt, sub1_in2.txt, sub1_in3.txt
Subtask2 sub1_in1.txt, sub1_in2.txt, sub1_in3.txt, sub2_in1.txt, sub2_in2.txt, sub2_in3.txt
Subtask3 sub1_in1.txt, sub1_in2.txt, sub1_in3.txt, sub2_in1.txt, sub2_in2.txt, sub2_in3.txt, sub3_in1.txt, sub3_in2.txt, sub3_in3.txt
Subtask4 sub1_in1.txt, sub1_in2.txt, sub1_in3.txt, sub2_in1.txt, sub2_in2.txt, sub2_in3.txt, sub3_in1.txt, sub3_in2.txt, sub3_in3.txt, sub4_in1.txt, sub4_in2.txt, sub4_in3.txt
Subtask5 sub1_in1.txt, sub1_in2.txt, sub1_in3.txt, sub2_in1.txt, sub2_in2.txt, sub2_in3.txt, sub3_in1.txt, sub3_in2.txt, sub3_in3.txt, sub4_in1.txt, sub4_in2.txt, sub4_in3.txt, sub5_in1.txt, sub5_in2.txt, sub5_in3.txt
Case Name Status Exec Time Memory
sub1_in1.txt AC 390 ms 195712 KB
sub1_in2.txt AC 390 ms 195712 KB
sub1_in3.txt AC 390 ms 195712 KB
sub2_in1.txt AC 390 ms 195712 KB
sub2_in2.txt AC 390 ms 195712 KB
sub2_in3.txt AC 390 ms 195712 KB
sub3_in1.txt AC 390 ms 195712 KB
sub3_in2.txt AC 390 ms 195712 KB
sub3_in3.txt AC 390 ms 195712 KB
sub4_in1.txt AC 390 ms 195712 KB
sub4_in2.txt AC 390 ms 195712 KB
sub4_in3.txt AC 390 ms 195712 KB
sub5_in1.txt AC 390 ms 195712 KB
sub5_in2.txt AC 390 ms 195712 KB
sub5_in3.txt AC 390 ms 195712 KB