• [机房测试]10.24


    [机房测试]10.24

    ssw02 暴力分都没拿满,ssw02 真是个菜鸡 , 话说dyy的T3是真的毒瘤

    欢迎转载ssw02的博客:https://www.cnblogs.com/ssw02/p/11734503.html


    考试的时间点记录

    14:15 发题,这,不是西安原题吗??

    14:36 T1 切完 开T2

    15:40 T2 思路错误,开T3部分分

    15:58 T3 40分 重做T2

    16:34 放弃T2,速写暴力

    16:50 T1 有点不对,快改改

    17:10 ssw02惨遭处刑

    折纸

    模拟一下嘛,只用维护3000个修改节点即可了。M^2大水题。

    话说这个代码还可以只有2排主函数、。。。。(全部定义正方向的做法)

    #include<bits/stdc++.h>
    using namespace std ;
    const int MAXN = 3005 ; 
    #define ll long long
    inline ll read(){
    	ll s=0 ; char g=getchar() ; while( g>'9'||g<'0' )g=getchar() ; 
    	while( g>='0'&&g<='9' )s=s*10+g-'0',g=getchar() ; return s ; 
    }
    ll a[MAXN] , b[MAXN] , len , N , L , R ; 
    int main(){
    	freopen("fold.in","r",stdin) ;
    	freopen("fold.out","w",stdout) ; 
    	len = read() , N = read() , L = 0 , R = len ;
    	for( int i = 1 ; i <= N ; ++i )a[i] = b[i] = read() ;
    	for( int now = 1 ; now <= N ; ++now ){
    		if( b[now] == R || b[now] == L )continue ;
    		if( b[now]*2LL > R+L ){
    			R = b[now] , len = R-L ; 
    			for( int j = now+1 ; j <= N ; ++j )
    				if( b[j] > b[now] )b[j] -= 2LL*abs( b[j]-b[now] ) ; 
    		}
    		else {
    			L = b[now] , len = R-L ; 
    			for( int j = now+1 ; j <= N ; ++j )
    			    if( b[j] < b[now] )b[j] += 2LL*abs( b[j]-b[now] ) ; 
    		}
    	}
    	cout<<len<<endl ; 
    }
    

    solve

    枚举答案可得30分,L==R的方法用扩欧即可(ssw02扩欧没判负数解,20白丢)

    L <= (Sx) mod M <= R 的式子打开后 主y的元 可以化为 (-r mod s ) <= My mod s <= ( -L mod s )

    可以用递归方法进行不断替换,只用解出简单解或者判断无解,剩下的递归即可。

    复杂度在 log 次递归就可以解决。

    #include<bits/stdc++.h>
    using namespace std ;
    #define ll long long
    inline ll read(){
    	ll s=0 ; char g=getchar() ; while( g>'9'||g<'0' )g=getchar() ; 
    	while( g>='0'&&g<='9' )s=s*10+g-'0',g=getchar() ; return s ; 
    }
    ll T , M , S  , L , R ; 
    ll dfs( ll m , ll s , ll l , ll r ){
    	if( !s%m )return -1 ; 
    	s %= m ; 
    	if( l == 0 )return 0 ; //特判,如果左边界为0,那么x即可=0 (这里的x只会是局部x,并不是总答案的x) 
    	if( l > r || l >= m )return -1 ;
    	ll t = (l-1)/s + 1 ; if( t*s <= r )return t ; //用左边界向上取整,判断是否可以取到这个整数 
    	ll tmp = dfs( s , m , ( -r%s+s )%s , (-l%s+s )%s ) ; 
    	if( tmp == -1 )return -1 ; 
    	ll x = ( r+m*tmp)/s ;// sx + tmp*m <= r  满足当前 r 的x是惟一的  sx + tmp*m = r
    	if( s*x + tmp*m >= l )return x ; 
    	else return -1 ;
    }
    int main(){
    	freopen("solve.in","r",stdin) ;
    	freopen("solve.out","w",stdout) ; 
    	T = read() ; 
    	while( T-- ){
    		M = read() , S = read() , L = read() , R = read() ; 
    		cout<<dfs( M , S , L , min( R , M-1 ) )<<endl ;//最初要特判一下 
    	}
    }
    

    reverse

    话说昨天T2也叫reverse,说不定今年csp也有道题叫reverse

    本来可以数据分治得45分的,结果ssw02手贱了。。。

    消失的work1()????

    消失的work1()

    ssw02的数位Dp太菜了,先留个坑

  • 相关阅读:
    TypeError: 'encoding' is an invalid keyword argument for this function 解决Python 2.7
    valid-palindrome leetcode C++
    valid-palindrome leetcode C++
    word-break-ii leetcode C++
    word-break-ii leetcode C++
    word-break leetcoder C++
    word-break leetcoder C++
    word-ladder leetcoder C++
    word-ladder leetcoder C++
    triangle leetcode C++
  • 原文地址:https://www.cnblogs.com/ssw02/p/11734503.html
Copyright © 2020-2023  润新知