Submission #2123845


Source Code Expand

#include <iostream>
#include <algorithm>
#include <bitset>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#include <array>
#include <unordered_map>
#include <complex>
#include <deque>
#include <cassert>
#include <cmath>
#include <functional>
#include <iomanip>
#include <chrono>
#include <random>
#include <numeric>
#include <tuple>
#include <cstring>
using namespace std;

#define forr(x,arr) for(auto&& x:arr)
#define _overload3(_1,_2,_3,name,...) name
#define _rep2(i,n) _rep3(i,0,n)
#define _rep3(i,a,b) for(int i=int(a);i<int(b);++i)
#define rep(...) _overload3(__VA_ARGS__,_rep3,_rep2,)(__VA_ARGS__)
#define _rrep2(i,n) _rrep3(i,0,n)
#define _rrep3(i,a,b) for(int i=int(b)-1;i>=int(a);i--)
#define rrep(...) _overload3(__VA_ARGS__,_rrep3,_rrep2,)(__VA_ARGS__)
#define all(x) (x).begin(),(x).end()
#define bit(n) (1LL<<(n))
#define sz(x) ((int)(x).size())
#define TEN(n) ((ll)(1e##n))
#define fst first
#define snd second

string DBG_DLM(int &i){return(i++==0?"":", ");}
#define DBG_B(exp){int i=0;os<<"{";{exp;}os<<"}";return os;}
template<class T>ostream&operator<<(ostream&os,vector<T>v);
template<class T>ostream&operator<<(ostream&os,set<T>v);
template<class T>ostream&operator<<(ostream&os,queue<T>q);
template<class T>ostream&operator<<(ostream&os,priority_queue<T>q);
template<class T,class K>ostream&operator<<(ostream&os,pair<T,K>p);
template<class T,class K>ostream&operator<<(ostream&os,map<T,K>mp);
template<class T,class K>ostream&operator<<(ostream&os,unordered_map<T,K>mp);
template<int I,class TPL>void DBG(ostream&os,TPL t){}
template<int I,class TPL,class H,class...Ts>void DBG(ostream&os,TPL t){os<<(I==0?"":", ")<<get<I>(t);DBG<I+1,TPL,Ts...>(os,t);}
template<class T,class K>void DBG(ostream&os,pair<T,K>p,string delim){os<<"("<<p.first<<delim<<p.second<<")";}
template<class...Ts>ostream&operator<<(ostream&os,tuple<Ts...>t){os<<"(";DBG<0,tuple<Ts...>,Ts...>(os,t);os<<")";return os;}
template<class T,class K>ostream&operator<<(ostream&os,pair<T,K>p){DBG(os,p,", ");return os;}
template<class T>ostream&operator<<(ostream&os,vector<T>v){DBG_B(forr(t,v){os<<DBG_DLM(i)<<t;});}
template<class T>ostream&operator<<(ostream&os,set<T>s){DBG_B(forr(t,s){os<<DBG_DLM(i)<<t;});}
template<class T>ostream&operator<<(ostream&os,queue<T>q){DBG_B(for(;q.size();q.pop()){os<<DBG_DLM(i)<<q.front();});}
template<class T>ostream&operator<<(ostream&os,priority_queue<T>q){DBG_B(for(;q.size();q.pop()){os<<DBG_DLM(i)<<q.top();});}
template<class T,class K>ostream&operator<<(ostream&os,map<T,K>m){DBG_B(forr(p,m){os<<DBG_DLM(i);DBG(os,p,"->");});}
template<class T,class K>ostream&operator<<(ostream&os,unordered_map<T,K>m){DBG_B(forr(p,m){os<<DBG_DLM(i);DBG(os,p,"->");});}
#define DBG_OVERLOAD(_1,_2,_3,_4,_5,_6,macro_name,...)macro_name
#define DBG_LINE(){char s[99];sprintf(s,"line:%3d | ",__LINE__);cerr<<s;}
#define DBG_OUTPUT(v){cerr<<(#v)<<"="<<(v);}
#define DBG1(v,...){DBG_OUTPUT(v);}
#define DBG2(v,...){DBG_OUTPUT(v);cerr<<", ";DBG1(__VA_ARGS__);}
#define DBG3(v,...){DBG_OUTPUT(v);cerr<<", ";DBG2(__VA_ARGS__);}
#define DBG4(v,...){DBG_OUTPUT(v);cerr<<", ";DBG3(__VA_ARGS__);}
#define DBG5(v,...){DBG_OUTPUT(v);cerr<<", ";DBG4(__VA_ARGS__);}
#define DBG6(v,...){DBG_OUTPUT(v);cerr<<", ";DBG5(__VA_ARGS__);}
#define DEBUG0(){DBG_LINE();cerr<<endl;}
#ifdef LOCAL
#define out(...){DBG_LINE();DBG_OVERLOAD(__VA_ARGS__,DBG6,DBG5,DBG4,DBG3,DBG2,DBG1)(__VA_ARGS__);cerr<<endl;}
#else
#define out(...)
#endif

using ll=long long;
using pii=pair<int,int>;using pll=pair<ll,ll>;using pil=pair<int,ll>;using pli=pair<ll,int>;
using vs=vector<string>;using vvs=vector<vs>;using vvvs=vector<vvs>;
using vb=vector<bool>;using vvb=vector<vb>;using vvvb=vector<vvb>;
using vi=vector<int>;using vvi=vector<vi>;using vvvi=vector<vvi>;
using vl=vector<ll>;using vvl=vector<vl>;using vvvl=vector<vvl>;
using vd=vector<double>;using vvd=vector<vd>;using vvvd=vector<vvd>;
using vpii=vector<pii>;using vvpii=vector<vpii>;using vvvpii=vector<vvpii>;
template<class A,class B>bool amax(A&a,const B&b){return b>a?a=b,1:0;}
template<class A,class B>bool amin(A&a,const B&b){return b<a?a=b,1:0;}
ll ri(){ll l;cin>>l;return l;} string rs(){string s;cin>>s;return s;}

const int mod = 1e9+7;
template<int MOD> struct Mint {
	int x;
	Mint() : x(0) {}
	Mint(int y) : x(y >= 0 ? y % MOD : MOD - (-y) % MOD) {}
	Mint(int64_t sll) : x(sll % MOD) { if (x < 0) x += MOD; }
	Mint &operator+=(const Mint &rhs){ if((x += rhs.x) >= MOD) x -= MOD; return *this; }
	Mint &operator-=(const Mint &rhs){ if((x += MOD - rhs.x) >= MOD) x -= MOD; return *this; }
	Mint &operator*=(const Mint &rhs){ x = 1LL*x*rhs.x % MOD; return *this; }
	Mint &operator/=(const Mint &rhs){ x = (1LL*x*rhs.inv().x) % MOD; return *this; }
	Mint operator-() const { return Mint(-x); }
	Mint operator+(const Mint &rhs) const { return Mint(*this) += rhs; }
	Mint operator-(const Mint &rhs) const { return Mint(*this) -= rhs; }
	Mint operator*(const Mint &rhs) const { return Mint(*this) *= rhs; }
	Mint operator/(const Mint &rhs) const { return Mint(*this) /= rhs; }
	bool operator<(const Mint &rhs) const { return x < rhs.x; }
	Mint inv() const {
		assert(x != 0);
		signed a = x, b = MOD, u = 1, v = 0, t;
		while (b) { t = a / b; a -= t * b; swap(a, b); u -= t * v; swap(u, v); }
		return Mint(u);
	}
	Mint operator^(uint64_t t) const {
		Mint e = *this, res = 1;
		for(; t; e *= e, t>>=1) if (t & 1) res *= e;
		return res;
	}
};
template<int MOD> ostream &operator<<(ostream &os, const Mint<MOD> &rhs) { return os << rhs.x; }
template<int MOD> istream &operator>>(istream &is, Mint<MOD> &rhs) { int64_t s; is >> s; rhs = Mint<MOD>(s); return is; };

using mint = Mint<mod>;
using vm=vector<mint>;using vvm=vector<vm>;using vvvm=vector<vvm>;

mint solve() {
	int h = ri(), w = ri();

	if (w == 1) {
		swap(h, w);
		if (w == 1) return 1;
	}

	vm dp1(bit(w+1));
	vm dp2(bit(w+1));

	vm &cur = dp1;
	vm &nex = dp2;

	cur[0] = 1;

	rep(i, h) {
		rep(j, w) {
			fill(all(nex), 0);
			rep(mask, bit(w+1)) {
				bool can;
				if (j == 0) {
					can = !(mask & bit(1)) && !(mask & bit(2));
				}
				else if (j == w-1) {
					can = !(mask & bit(0)) && !(mask & bit(1)) && !(mask & bit(w));
				}
				else {
					can = !(mask & bit(0)) && !(mask & bit(1)) && !(mask & bit(2)) && !(mask & bit(w));
				}

				if (can) {
					nex[(mask >> 1)|bit(w)] += cur[mask];
				}
				nex[mask >> 1] += cur[mask];
			}
			swap(cur, nex);
		}
	}

	mint ans = 0;
	rep(mask, bit(w+1)) {
		ans += cur[mask];
	}
	ans -= 1;

	return ans;
}

void Main() {
	cout << solve() << endl;
}

signed main() {
	cin.tie(nullptr);
	ios::sync_with_stdio(false);
	Main();
	return 0;
}

Submission Info

Submission Time
Task A - 天下一有無
User shiratty8
Language C++14 (GCC 5.4.1)
Score 40
Code Size 6856 Byte
Status AC
Exec Time 47 ms
Memory 768 KB

Judge Result

Set Name All
Score / Max Score 40 / 40
Status
AC × 120
Set Name Test Cases
All case0, case1, case10, case100, case101, case102, case103, case104, case105, case106, case107, case108, case109, case11, case110, case111, case112, case113, case114, case115, case116, case117, case118, case119, case12, case13, case14, case15, case16, case17, case18, case19, case2, case20, case21, case22, case23, case24, case25, case26, case27, case28, case29, case3, case30, case31, case32, case33, case34, case35, case36, case37, case38, case39, case4, case40, case41, case42, case43, case44, case45, case46, case47, case48, case49, case5, case50, case51, case52, case53, case54, case55, case56, case57, case58, case59, case6, case60, case61, case62, case63, case64, case65, case66, case67, case68, case69, case7, case70, case71, case72, case73, case74, case75, case76, case77, case78, case79, case8, case80, case81, case82, case83, case84, case85, case86, case87, case88, case89, case9, case90, case91, case92, case93, case94, case95, case96, case97, case98, case99
Case Name Status Exec Time Memory
case0 AC 1 ms 256 KB
case1 AC 1 ms 256 KB
case10 AC 1 ms 256 KB
case100 AC 3 ms 256 KB
case101 AC 2 ms 256 KB
case102 AC 8 ms 384 KB
case103 AC 2 ms 256 KB
case104 AC 32 ms 768 KB
case105 AC 3 ms 256 KB
case106 AC 5 ms 384 KB
case107 AC 9 ms 384 KB
case108 AC 17 ms 512 KB
case109 AC 35 ms 768 KB
case11 AC 2 ms 384 KB
case110 AC 5 ms 384 KB
case111 AC 9 ms 384 KB
case112 AC 19 ms 512 KB
case113 AC 6 ms 384 KB
case114 AC 10 ms 384 KB
case115 AC 11 ms 384 KB
case116 AC 41 ms 768 KB
case117 AC 21 ms 512 KB
case118 AC 44 ms 768 KB
case119 AC 47 ms 768 KB
case12 AC 2 ms 384 KB
case13 AC 3 ms 512 KB
case14 AC 5 ms 768 KB
case15 AC 1 ms 256 KB
case16 AC 1 ms 256 KB
case17 AC 1 ms 256 KB
case18 AC 1 ms 256 KB
case19 AC 1 ms 256 KB
case2 AC 1 ms 256 KB
case20 AC 1 ms 256 KB
case21 AC 1 ms 256 KB
case22 AC 1 ms 256 KB
case23 AC 1 ms 256 KB
case24 AC 2 ms 256 KB
case25 AC 1 ms 256 KB
case26 AC 1 ms 256 KB
case27 AC 4 ms 512 KB
case28 AC 8 ms 768 KB
case29 AC 1 ms 256 KB
case3 AC 1 ms 256 KB
case30 AC 1 ms 256 KB
case31 AC 1 ms 256 KB
case32 AC 1 ms 256 KB
case33 AC 1 ms 256 KB
case34 AC 1 ms 256 KB
case35 AC 1 ms 256 KB
case36 AC 1 ms 256 KB
case37 AC 1 ms 256 KB
case38 AC 2 ms 384 KB
case39 AC 1 ms 256 KB
case4 AC 1 ms 256 KB
case40 AC 6 ms 512 KB
case41 AC 1 ms 256 KB
case42 AC 1 ms 256 KB
case43 AC 1 ms 256 KB
case44 AC 1 ms 256 KB
case45 AC 1 ms 256 KB
case46 AC 1 ms 256 KB
case47 AC 1 ms 256 KB
case48 AC 1 ms 256 KB
case49 AC 1 ms 256 KB
case5 AC 1 ms 256 KB
case50 AC 2 ms 384 KB
case51 AC 4 ms 384 KB
case52 AC 1 ms 256 KB
case53 AC 14 ms 768 KB
case54 AC 1 ms 256 KB
case55 AC 1 ms 256 KB
case56 AC 1 ms 256 KB
case57 AC 1 ms 256 KB
case58 AC 1 ms 256 KB
case59 AC 2 ms 256 KB
case6 AC 1 ms 256 KB
case60 AC 2 ms 256 KB
case61 AC 1 ms 256 KB
case62 AC 1 ms 256 KB
case63 AC 1 ms 256 KB
case64 AC 1 ms 256 KB
case65 AC 1 ms 256 KB
case66 AC 1 ms 256 KB
case67 AC 1 ms 256 KB
case68 AC 1 ms 256 KB
case69 AC 2 ms 256 KB
case7 AC 1 ms 256 KB
case70 AC 2 ms 256 KB
case71 AC 1 ms 256 KB
case72 AC 1 ms 256 KB
case73 AC 1 ms 256 KB
case74 AC 20 ms 768 KB
case75 AC 1 ms 256 KB
case76 AC 1 ms 256 KB
case77 AC 1 ms 256 KB
case78 AC 1 ms 256 KB
case79 AC 1 ms 256 KB
case8 AC 1 ms 256 KB
case80 AC 1 ms 256 KB
case81 AC 6 ms 384 KB
case82 AC 11 ms 512 KB
case83 AC 1 ms 256 KB
case84 AC 1 ms 256 KB
case85 AC 1 ms 256 KB
case86 AC 2 ms 256 KB
case87 AC 1 ms 256 KB
case88 AC 4 ms 384 KB
case89 AC 7 ms 384 KB
case9 AC 1 ms 256 KB
case90 AC 13 ms 512 KB
case91 AC 1 ms 256 KB
case92 AC 1 ms 256 KB
case93 AC 2 ms 256 KB
case94 AC 2 ms 256 KB
case95 AC 4 ms 384 KB
case96 AC 7 ms 384 KB
case97 AC 14 ms 512 KB
case98 AC 29 ms 768 KB
case99 AC 2 ms 256 KB