• 机房测试8.24


    keys

    简单贪心(idy002原话)

    我反正是不信的。

    要点是证明选择的钥匙一定是连续的n个。

    可通过三个点两个人一个办公室之间的选择优劣来进行理解。

    问题是为什么输出距离最大值就可以AC?

    idy002老师的数据已经日渐生命之源(水)了。

    忆往昔线段树0分程序5e4大样例A的飞快。

    #include<cstdio>
    #include<queue>
    #include<algorithm>
    #define FN "keys"
    
    const int maxn=5000+5;
    const int maxk=10000+5;
    const int oo=0x3f3f3f3f;
    
    int a[maxn],b[maxk];
    
    int abs(int x) {return x<0?-x:x;}
    
    int main() {
    	freopen(FN".in","r",stdin);
    	freopen(FN".out","w",stdout);
    	int n,k,p;scanf("%d%d%d",&n,&k,&p);
    	for(int i=1;i<=n;i++) scanf("%d",a+i);
    	for(int i=1;i<=k;i++) scanf("%d",b+i);
    	std::sort(a+1,a+n+1),std::sort(b+1,b+k+1);
    	int ans=oo;
    	for(int i=1;i+n<=k;i++) {
    		int temp=0;
    		for(int j=0;j<n;j++)
    			temp=std::max(temp,abs(b[i+j]-a[j+1])+abs(b[i+j]-p));
    		ans=std::min(ans,temp);
    	}
    	printf("%d",ans);
    	return 0;
    }
    
    

    cards

    模拟题,用数据结构加速即可。

    以上idy002原话。

    先来杀比30分做法

    抽牌,看牌,洗回去,满满的的queue。

    最小值,会变,满满的priority_queue。

    30分GET!

    100分,掏出树状数组,接上vector,瞎搞搞,完事。

    #include<cstdio>
    #include<vector>
    #include<algorithm>
    #define FN "cards"
    #define lowbit(i) i&(-i)
    const int maxn=1e5+5;
    
    int dit[maxn],n,val[maxn],vmax;
    long long ans;
    std::vector<int> vc[maxn];
    
    void add(int pos,int delta) {
    	for(int i=1;i<=n+1;i+=lowbit(i))
    		dit[i]+=delta;
    }
    
    int query(int pos) {
    	int rt=0;
    	for(int i=pos;i;i-=lowbit(i))
    		rt+=dit[i];
    	return rt;
    }
    
    int query(int l,int r) {return query(r)-query(l-1);}
    
    int clac(int x,int y) {
    	if(x<=y) return query(x,y);
    	else return query(x,n)+query(1,y);
    }
    
    int main() {
    	freopen(FN".in","r",stdin);
    	freopen(FN".out","w",stdout);
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++) {
    		scanf("%d",val+i);
    		vc[val[i]].push_back(i);
    		vmax=std::max(vmax,val[i]);
    	}
    	n++;
    	for(int i=1;i<=n-1;i++) add(i,1);
    	int now=n;
    	for(int i=1;i<=vmax;i++) {
    		if(vc[i].empty()) continue;
    		int pos=int(std::upper_bound(vc[i].begin(),vc[i].end(),now)-vc[i].begin());
    		for(int k=pos;k<(int)vc[i].size();k++) {
    			ans+=clac(now,vc[i][k]);
    			add(vc[i][k],-1);
    			now=vc[i][k];
    		}
    		for(int k=0;k<pos;k++) {
    			ans+=clac(now,vc[i][k]);
    			add(vc[i][k],-1);
    			now=vc[i][k];
    		}
    	}
    	printf("%I64d",ans);
    }
    
    

    bamboo

    整除分块。

    本来是a_maxn级别的,可以变成sqrt(a_max)n,就偷税的解决了。

    其实主要因为整除分块昨天晚上才讲过。

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 111;
    
    int n;
    long long k;
    vector<long long> vc;
    long long aa[N];
    
    void split( long long a, vector<long long> &vc ) {
    	for( long long d = 1, dd; ; d = dd + 1 ) {
    		long long k = (a + d - 1) / d;
    		if( k <= 1 ) break;
    		dd = (a + k - 1 - 1) / (k - 1) - 1;
    		vc.push_back(d);
    	}
    	vc.push_back(a);
    }
    bool check( long long d ) {
    	long long sum = 0;
    	for( int i = 1; i <= n; i++ ) {
    		sum += (aa[i] + d - 1) / d * d - aa[i];
    	}
    	return sum <= k;
    }
    int main() {
    	freopen("bamboo.in", "r", stdin);
    	freopen("bamboo.out", "w", stdout);
    	scanf("%d%lld", &n, &k );
    	for( int i = 1; i <= n; i++ ) {
    		scanf("%lld", aa + i );
    		split(aa[i],vc);
    	}
    	sort( vc.begin(), vc.end() );
    	vc.erase(unique(vc.begin(),vc.end()),vc.end());
    	vc.push_back( 10000000000000ll );
    	long long ans = 1;
    	for( int t = 0; t + 1 < (int)vc.size(); t++ ) {
    		long long lf = vc[t];
    		long long rg = vc[t+1] - 1;
    		if( check(lf) == false ) continue;
    		while( lf < rg ) {
    			long long mid = (lf + rg + 1) >> 1;
    			if( check(mid) )
    				lf = mid;
    			else
    				rg = mid - 1;
    		}
    		ans = max( ans, lf );
    	}
    	printf( "%lld
    ", ans );
    }
    
    

    总结(讲垃圾话)

    T1贪错了。
    其余暴力。
    万事休矣。

    放假了,人凉了。

    27号和林荫dalao一起考试,有点方。

    好好回家A解密实验室吧!

  • 相关阅读:
    Qt 打开UI是提示Runtime Error! 。。。 然后奔溃
    Qt exe和动态 库获取运行所需库
    区分EXE或者动态库dll是32位或者64位方法
    QFile 读2进制文件
    MFC 动态库编译错误
    Qt 编译错误
    Qt QNetworkProxy类帮助翻译
    Qt QHttpMultiPart类帮助翻译
    Qt QNetworkCookie帮助翻译
    Qt QHttpPart翻译
  • 原文地址:https://www.cnblogs.com/LoLiK/p/9530916.html
Copyright © 2020-2023  润新知