[机房测试]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太菜了,先留个坑

posted @ 2019-10-24 19:59  蓝银杏-SSW  阅读(211)  评论(0编辑  收藏  举报
//结束