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
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 |
|
|
|
|
|
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 |