• AtCoder Beginner Contest 117 解题报告


    果然abc都是手速场。

    倒序开的qwq。
    D题因为忘记1e12二进制几位上界爆了一发。

    A - Entrance Examination

    就是除一下就行了。。。
    看样例猜题意系列。

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    int main(){
    	double t,x;
    	scanf("%lf%lf",&t,&x);
    	printf("%lf",t/x);
    	return 0;
    }
    

    B - Polygon

    他都把定理给你了。。。
    你直接按他的意思模拟就好,数组都不用开

    #include <bits/stdc++.h>
    
    int main() {
    	int n, sum = 0, mx = 0;
    	scanf("%d", &n);
    	for(int x, i = 1; i <= n; ++i) {
    		scanf("%d", &x);
    		sum += x;
    		mx = std::max(mx, x);
    	}
    	if(mx < sum - mx) puts("Yes");
    	else puts("No");
    }
    

    C - Streamline

    直接贪心就好了。
    我们把序列先排序然后差分一下。
    显然中间那些长的间隔我们不要走。
    所以把间隔排序。
    然后再间隔的右边放一个棋子就好了。
    也就是说前m大的间隔我们都不用走。这个想了挺久的。。。

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <vector>
    #include <queue>
    #include <cmath>
    #include <stack>
    #include <deque>
    #include <map>
    #include <set>
    
    #define ll long long
    #define inf 0x3f3f3f3f
    #define il inline
    
    namespace io {
    
        #define in(a) a=read()
        #define out(a) write(a)
        #define outn(a) out(a),putchar('
    ')
    
        #define I_int ll
        inline I_int read() {
            I_int x = 0 , f = 1 ; char c = getchar() ;
            while( c < '0' || c > '9' ) { if( c == '-' ) f = -1 ; c = getchar() ; }
            while( c >= '0' && c <= '9' ) { x = x * 10 + c - '0' ; c = getchar() ; }
            return x * f ;
        }
        char F[ 200 ] ;
        inline void write( I_int x ) {
            if( x == 0 ) { putchar( '0' ) ; return ; }
            I_int tmp = x > 0 ? x : -x ;
            if( x < 0 ) putchar( '-' ) ;
            int cnt = 0 ;
            while( tmp > 0 ) {
                F[ cnt ++ ] = tmp % 10 + '0' ;
                tmp /= 10 ;
            }
            while( cnt > 0 ) putchar( F[ -- cnt ] ) ;
        }
        #undef I_int
    
    }
    using namespace io ;
    
    using namespace std ;
    
    #define N 100010
    
    int m = read(), n = read();
    int a[N], f[N];
    
    bool cmp(int a, int b) {
    	return a > b;
    }
    
    int main() {
    	for(int i = 1; i <= n; ++i) a[i] = read();
    	sort(a + 1, a + n + 1);
    	if(m >= n) return puts("0"), 0;
    	int cnt = 0;
    	for(int i = 2; i <= n; ++i) {
    		f[++cnt] = a[i] - a[i - 1];
    	}
    	sort(f + 1, f + n + 1, cmp);
    	ll ans = 0;
    	for(int i = m; i <= n; ++i) ans += f[i];
    	printf("%lld
    ", ans);
    } 
    

    D - XXOR

    据说样例锅了?
    反正我记错位运算+上界算错这题卡了半小时。。。
    因为是XOR所以我们按位来考虑,从高位往低位贪心。
    XOR是不进位的加法,我们从这个角度来考虑。
    统计该位上0个数和1个数。
    如果0的个数多显然题面里的那个x这一位就必须有1(在x不超过k的情况下)。
    注意开1ll,以及不要记错取出一个数的第k位的位运算是长啥样的。。。

    #include <algorithm>
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <vector>
    #include <queue>
    #include <cmath>
    #include <stack>
    #include <deque>
    #include <map>
    #include <set>
    
    #define ll long long
    #define inf 0x3f3f3f3f
    #define il inline
    
    namespace io {
    
        #define in(a) a=read()
        #define out(a) write(a)
        #define outn(a) out(a),putchar('
    ')
    
        #define I_int ll
        inline I_int read() {
            I_int x = 0 , f = 1 ; char c = getchar() ;
            while( c < '0' || c > '9' ) { if( c == '-' ) f = -1 ; c = getchar() ; }
            while( c >= '0' && c <= '9' ) { x = x * 10 + c - '0' ; c = getchar() ; }
            return x * f ;
        }
        char F[ 200 ] ;
        inline void write( I_int x ) {
            if( x == 0 ) { putchar( '0' ) ; return ; }
            I_int tmp = x > 0 ? x : -x ;
            if( x < 0 ) putchar( '-' ) ;
            int cnt = 0 ;
            while( tmp > 0 ) {
                F[ cnt ++ ] = tmp % 10 + '0' ;
                tmp /= 10 ;
            }
            while( cnt > 0 ) putchar( F[ -- cnt ] ) ;
        }
        #undef I_int
    
    }
    using namespace io ;
    
    using namespace std ;
    
    #define N 100010
    
    ll n = read(), K = read();
    ll a[N], cnt[2];
    
    bool cmp(int a, int b) {
    	return a > b;
    }
    
    int main() {
    	for(int i = 1; i <= n; ++i) a[i] = read();
    	ll ans = 0;
    	for(ll k = 42; k >= 0; --k) {
    		cnt[0] = cnt[1] = 0; 
    		for(int i = 1; i <= n; ++i) {
    			cnt[(a[i]>>k)&1ll]++;
    		}
    		if(cnt[0] > cnt[1] && ans + (1ll << k) <= K) ans += (1ll << k);
    	}
    	ll sum = 0;
    	for(int i = 1; i <= n; ++i) {
    		sum += ans ^ a[i];
    	}
    	printf("%lld
    ", sum);
    	return 0;
    }
    
  • 相关阅读:
    Nmap笔记
    Spring AOP(一)
    Spring IOC(三)
    Spring IOC(二)
    Spring IOC(一)
    bootstrap 使用(三)
    bootstrap 使用(二)
    bootstrap 使用(一)
    js(二)
    QQ邮件
  • 原文地址:https://www.cnblogs.com/henry-1202/p/10351045.html
Copyright © 2020-2023  润新知