[机房测试]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()????
ssw02的数位Dp太菜了,先留个坑