本文共 1662 字,大约阅读时间需要 5 分钟。
水题,枚举就好了,我枚举到了129个周期.
#include #include #include #include #include #include #include #include #include #include #include #include #define MEM(x,y) memset ( x , y , sizeof ( x ) )#define rep(i,a,b) for (int i = (a) ; i <= (b) ; ++ i)#define per(i,a,b) for (int i = (a) ; i >= (b) ; -- i)#define pii pair < int , int >#define one first#define two second#define rint read #define int long long#define pb push_backusing std::queue ;using std::set ;using std::pair ;using std::max ;using std::min ;using std::priority_queue ;using std::vector ;using std::swap ;using std::sort ;using std::unique ;using std::greater ;template < class T > inline T read () { T x = 0 , f = 1 ; char ch = getchar () ; while ( ch < '0' || ch > '9' ) { if ( ch == '-' ) f = - 1 ; ch = getchar () ; } while ( ch >= '0' && ch <= '9' ) { x = ( x << 3 ) + ( x << 1 ) + ( ch - 48 ) ; ch = getchar () ; } return f * x ;}const int N = 1e2 + 10 ;const int M = 5e3 + 10 ;int on[M] , ans ;int n , p[N][2] ;char s[N] ;signed main (int argc , char * argv[]) { n = rint () ; scanf ("%s" , s + 1 ) ; rep ( i , 1 , n ) { p[i][0] = rint () ; p[i][1] = rint () ; } rep ( i , 1 , n ) if ( s[i] == '1' ) rep ( j , 0 , p[i][1] - 1 ) ++ on[j] ; rep ( i , 1 , n ) { bool f = ( s[i] == '1' ) ; int tot = 0 ; for (int j = p[i][1] ; tot <= 129 ; j += p[i][0]) { f ^= 1 ; ++ tot ; if ( f ) rep ( k , j , j + p[i][0] - 1 ) ++ on[k] ; } } rep ( i , 0 , M - 1 ) ans = max ( ans , on[i] ) ; printf ("%lld\n" , ans ) ; return 0 ;}
转载于:https://www.cnblogs.com/Equinox-Flower/p/11536029.html