[20151014]SCZ训练

T1:

给出一个数列 an ,求 n1n1aixoraj

Solution :
数一数每一个位子上1的个数即可

Code:

/*************************************************************************
    > File Name: alien.cpp
    > Author: Archer
 ************************************************************************/

#include <bits/stdc++.h>
#include <ext/pb_ds/priority_queue.hpp>
using namespace std;

typedef long long ll;
const int N = 1111111;
int n, a[N], cnt[2];
ll ans, p;
inline void setIO(){
    freopen("alien.in", "r", stdin);
    freopen("alien.out", "w", stdout);
}
inline int read(){
    int x = 0, f = 1; char ch = getchar();
    while (!isdigit(ch)) {if (ch == '-') f = -1; ch = getchar();}
    while (isdigit(ch)) {x = x * 10 + ch - '0'; ch = getchar(); }
    return x * f;
}

int main(){
    setIO();

    n = read();
    for (int i = 1; i <= n; i++) a[i] = read();
    sort(a + 1, a + 1 + n);

    ans = 0ll; p = 1ll;
    while (a[n] > 0){
        cnt[0] = 0; cnt[1] = 0;
        for (int i = 1; i <= n; i++)
            cnt[a[i] & 1]++, a[i] >>= 1;
        ans += 1ll * cnt[0] * cnt[1] * p;
        p <<= 1;
    }
    printf("%I64d\n", ans);

    return 0;
}

T2:

给出一些直线 yi=kix+bi ,抹去在x轴下方的部分,令 s(x)=n1yi ,求s的图像上有几个不为180的角

Solution:
直线叠加还是直线。
按零点排序即可。

Code:

/*************************************************************************
    > File Name: polyline.cpp
    > Author: Archer
 ************************************************************************/

#include <bits/stdc++.h>
#include <ext/pb_ds/priority_queue.hpp>
using namespace std;

typedef long long ll;
const int N = 111111;
struct L{ int k, b; } line[N];
int n, cnt;
ll sk;

#define WORK\
    if (line[cur].k < 0) sk -= line[cur].k * 1ll;\
    else sk += line[cur].k * 1ll;\
    cur++;\

inline void setIO(){
    freopen("polyline.in", "r", stdin);
    freopen("polyline.out", "w", stdout);
}
inline int read(){
    int x = 0, f = 1; char ch = getchar();
    while (!isdigit(ch)) {if (ch == '-') f = -1; ch = getchar(); }
    while (isdigit(ch)) {x = x * 10 + ch - '0'; ch = getchar(); }
    return x * f;
}
bool cmp(L l1, L l2){ 
    ll p = 1ll * l1.b * l2.k - 1ll * l2.b * l1.k;
    ll q = 1ll * l1.k * l2.k;
    if (q > 0) return p > 0;
    else return p < 0;
}

int main(){
    setIO();

    n = read(); cnt = 0; sk = 0;
    for (int i = 1; i <= n; i++){
        int t1 = read(), t2 = read();
        if (t1 == 0) continue;
        line[++cnt].k = t1; line[cnt].b = t2;
        if (line[cnt].k < 0) sk += line[cnt].k * 1ll;
    }

    sort(line + 1, line + 1 + cnt, cmp);
    int cur = 1, ans = 0;
    while (cur <= cnt){
        ll last = sk;
        WORK
        while (cur <= cnt && 1ll* line[cur].k * line[cur - 1].b - 1ll * line[cur].b * line[cur - 1].k == 0){
            WORK
        }
        if (sk != last) ans++;
    }
    printf("%d\n", ans);
    return 0;
}

T3:

搅屎题,没什么好说的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值