zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    codeforces 814B An express train to reveries
    codeforces 814A An abandoned sentiment from past
    codeforces 785D D. Anton and School
    codeforces 785C Anton and Fairy Tale
    codeforces 791C Bear and Different Names
    AOP详解
    Spring集成JUnit测试
    Spring整合web开发
    IOC装配Bean(注解方式)
    IOC装配Bean(XML方式)
  • 原文地址:https://www.cnblogs.com/henry-1202/p/10351045.html
Copyright © 2011-2022 走看看