#include <cstdio> #include <vector> #include <string> #include <stack> #include <queue> #include <algorithm> #include <map> #include <cmath> #include <set> using namespace std; typedef long long ll; typedef vector<int> vi; typedef pair<int, int> pii; #define fi first #define se second #define mp make_pair #define pb push_back const int INF = 1 << 30; const double EPS = 1e-12; int main() { int n; scanf("%d", &n); vi c(n+1,0), d(n+1,-1), ans(n+1,0); vector<ll> ile(n+1,0); ans[0]=0; ile[0]=1; ll mod=1000000007; for(int i=1; i<=n; i++) { scanf("%d %d", &c[i], &d[i]); int mini=c[i], maksi=d[i]; for(int j=1; j<=min(i,maksi); j++) { int pocz=i-j; if(j>=mini) { if(ans[pocz]>=ans[i]) { ans[i]=ans[pocz]+1; ile[i]=ile[pocz]; } else if(ans[pocz]+1==ans[i]) { ile[i]=(ile[i]+ile[pocz])%mod; } } mini=max(mini, c[pocz]); maksi=min(maksi,d[pocz]); //printf("%d: ans=%d ile=%lld\n",i,ans[i],ile[i]); } } if(ans[n]>0) printf("%d %lld\n", ans[n], ile[n]); else printf("NIE\n"); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <cstdio> #include <vector> #include <string> #include <stack> #include <queue> #include <algorithm> #include <map> #include <cmath> #include <set> using namespace std; typedef long long ll; typedef vector<int> vi; typedef pair<int, int> pii; #define fi first #define se second #define mp make_pair #define pb push_back const int INF = 1 << 30; const double EPS = 1e-12; int main() { int n; scanf("%d", &n); vi c(n+1,0), d(n+1,-1), ans(n+1,0); vector<ll> ile(n+1,0); ans[0]=0; ile[0]=1; ll mod=1000000007; for(int i=1; i<=n; i++) { scanf("%d %d", &c[i], &d[i]); int mini=c[i], maksi=d[i]; for(int j=1; j<=min(i,maksi); j++) { int pocz=i-j; if(j>=mini) { if(ans[pocz]>=ans[i]) { ans[i]=ans[pocz]+1; ile[i]=ile[pocz]; } else if(ans[pocz]+1==ans[i]) { ile[i]=(ile[i]+ile[pocz])%mod; } } mini=max(mini, c[pocz]); maksi=min(maksi,d[pocz]); //printf("%d: ans=%d ile=%lld\n",i,ans[i],ile[i]); } } if(ans[n]>0) printf("%d %lld\n", ans[n], ile[n]); else printf("NIE\n"); } |