提出 #319908
ソースコード 拡げる
#include <iostream>
#include <stdio.h>
#include <set>
#include <map>
#include <list>
#include <vector>
#include <algorithm>
#include <cmath>
#include <limits.h>
#include <string>
#include <queue>
#include <functional>
#include <stack>
#include <complex>
#include <stdlib.h>
#include <string.h>
using namespace std;
namespace{
#define CAST( T, val ) ( (T)( val ) )
#define CASE( lb ) break; case lb:
#define CASE_CONTINUE( lb ) case lb:
#define CASE_DEFAULT break; default:
#define For( i, s ) for(int i= 0; i< (int)s; i++)
#define ForA( i, a, s ) for(int i= (int)a; i< (int)s; i++)
#define ForSize( i, s ) for(int i= 0, size= (int)s; i< size; i++)
#define ForSizeA( i, a, s ) for(int i= (int)a, size= (int)s; i< size; i++)
#define ForItr( itr, con ) for(auto itr= con.begin(); itr!= con.end(); itr++)
#define ForStr( i, str ) for(int i= 0; str[i]; i++)
#define GOTO( lb ) goto lb
#define LABEL( lb ) lb:
typedef long long LLint;
typedef unsigned int Uint;
typedef unsigned char Uchar;
typedef unsigned short Ushort;
const double EPS= 0.00000000023283064365386962890625; // 2^-32
template <typename T> class priority_queue_less : public priority_queue<T,vector<T>,greater<T> >{};
}
// 合同式
namespace{
class Mod{
typedef int Type;
public:
static const Type N= 1000000007;
Type x;
// opr, cst
Mod operator +(const Mod& m) const{ return Mod(x+m.x); }
const Mod& operator +=(const Mod& m){ x= (x+m.x)%N; return *this; }
Mod operator -(const Mod& m) const{ return Mod(x-m.x); }
const Mod& operator -=(const Mod& m){ x= (x-m.x)%N; return *this; }
Mod operator *(const Mod& m) const{ return Mod(x*m.x); }
const Mod& operator *=(const Mod& m){ x= (x*m.x)%N; return *this; }
Mod operator /(const Mod& m) const{
// フェルマーの小定理より, m.x の逆元は m.x^( HOU-2 )
const Type n= N-2; Type p= m.x, r= x; for(Type b= 1; b< n; b<<= 1){ if( n & b ) r= r*p%N; p= p*p%N; } return r;
}
const Mod& operator /=(const Mod& m){ return *this= *this /m; }
Mod(){}
Mod(const Type x) : x(x%N){}
};
istream& operator >>(istream& in, Mod& p){
return in>> p.x;
}
ostream& operator <<(ostream& out, const Mod& p){
return out<< p.x;
}
}
const int Ten5= 100000;
int FMem[Ten5];
Mod DP[Ten5];
int main(){
int N, M;
cin>> N>> M;
int *F= FMem;
For( i, N ){ cin>> F[i]; F[i]--; }
Mod* dp= DP;
set<int> set;
dp[0]= 1;
ForA( n, 1, N ){
set.clear();
set.insert( F[n] );
for(int i= n-1;; i--){
if( i == -1 ){
dp[n]+= 1;
break;
}else{
dp[n]+= dp[i];
if( set.find( F[i] )!= set.end() ) break;
set.insert( F[i] );
}
}
}
cout<< dp[N-1]<< endl;
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | D - サプリメント |
| ユーザ | BGSC |
| 言語 | C++11 (GCC 4.8.1) |
| 得点 | 30 |
| コード長 | 2796 Byte |
| 結果 | TLE |
| 実行時間 | 3034 ms |
| メモリ | 1648 KiB |
ジャッジ結果
| セット名 | Sample | Subtask1 | Subtask2 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 30 / 30 | 0 / 70 | ||||||||
| 結果 |
|
|
|
| セット名 | テストケース |
|---|---|
| Sample | subtask0-sample01.txt, subtask0-sample02.txt |
| Subtask1 | subtask0-sample01.txt, subtask0-sample02.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask1-16.txt, subtask1-17.txt, subtask1-18.txt, subtask1-19.txt, subtask1-20.txt |
| Subtask2 | subtask0-sample01.txt, subtask0-sample02.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask1-16.txt, subtask1-17.txt, subtask1-18.txt, subtask1-19.txt, subtask1-20.txt, subtask2-01.txt, subtask2-02.txt, subtask2-03.txt, subtask2-04.txt, subtask2-05.txt, subtask2-06.txt, subtask2-07.txt, subtask2-08.txt, subtask2-09.txt, subtask2-10.txt, subtask2-11.txt, subtask2-12.txt, subtask2-13.txt, subtask2-14.txt, subtask2-15.txt, subtask2-16.txt, subtask2-17.txt, subtask2-18.txt, subtask2-19.txt, subtask2-20.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| subtask0-sample01.txt | AC | 26 ms | 920 KiB |
| subtask0-sample02.txt | AC | 25 ms | 860 KiB |
| subtask1-01.txt | AC | 26 ms | 924 KiB |
| subtask1-02.txt | AC | 27 ms | 924 KiB |
| subtask1-03.txt | AC | 28 ms | 920 KiB |
| subtask1-04.txt | AC | 65 ms | 924 KiB |
| subtask1-05.txt | AC | 26 ms | 920 KiB |
| subtask1-06.txt | AC | 31 ms | 924 KiB |
| subtask1-07.txt | AC | 76 ms | 924 KiB |
| subtask1-08.txt | AC | 34 ms | 924 KiB |
| subtask1-09.txt | AC | 31 ms | 996 KiB |
| subtask1-10.txt | AC | 35 ms | 928 KiB |
| subtask1-11.txt | AC | 26 ms | 1000 KiB |
| subtask1-12.txt | AC | 53 ms | 1004 KiB |
| subtask1-13.txt | AC | 62 ms | 1000 KiB |
| subtask1-14.txt | AC | 75 ms | 1004 KiB |
| subtask1-15.txt | AC | 29 ms | 924 KiB |
| subtask1-16.txt | AC | 34 ms | 996 KiB |
| subtask1-17.txt | AC | 107 ms | 1000 KiB |
| subtask1-18.txt | AC | 2254 ms | 1124 KiB |
| subtask1-19.txt | AC | 30 ms | 1048 KiB |
| subtask1-20.txt | AC | 32 ms | 924 KiB |
| subtask2-01.txt | AC | 365 ms | 1120 KiB |
| subtask2-02.txt | AC | 53 ms | 1252 KiB |
| subtask2-03.txt | TLE | 3034 ms | 1380 KiB |
| subtask2-04.txt | TLE | 3034 ms | 1648 KiB |
| subtask2-05.txt | AC | 95 ms | 1636 KiB |
| subtask2-06.txt | AC | 73 ms | 1636 KiB |
| subtask2-07.txt | AC | 73 ms | 1644 KiB |
| subtask2-08.txt | TLE | 3034 ms | 1504 KiB |
| subtask2-09.txt | AC | 239 ms | 1636 KiB |
| subtask2-10.txt | TLE | 3033 ms | 1504 KiB |
| subtask2-11.txt | AC | 243 ms | 1636 KiB |
| subtask2-12.txt | TLE | 3033 ms | 1508 KiB |
| subtask2-13.txt | TLE | 3033 ms | 1632 KiB |
| subtask2-14.txt | AC | 100 ms | 1636 KiB |
| subtask2-15.txt | TLE | 3034 ms | 1636 KiB |
| subtask2-16.txt | AC | 557 ms | 1636 KiB |
| subtask2-17.txt | TLE | 3033 ms | 1508 KiB |
| subtask2-18.txt | TLE | 3033 ms | 1640 KiB |
| subtask2-19.txt | AC | 100 ms | 1636 KiB |
| subtask2-20.txt | TLE | 3034 ms | 1636 KiB |