您的位置:首页 > 其它

Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined)

2017-02-22 20:11 423 查看
A

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <utility>
using namespace std;

typedef long long ll;
const int qq = 1e5 + 10;
int n, m;
int num[qq];

int main(){
scanf("%d", &n);
for(int i = 0; i < n; ++i)
scanf("%d", num + i);
sort(num, num + n);
int minx = num[0];
int maxn = num[n - 1];
int cnt = 0;
for(int i = 1; i < n - 1; ++i)
if(num[i] > minx && num[i] < maxn) cnt++;
printf("%d\n", cnt);
return 0;
}
B

這題我在考慮方面非常不足, 關於整個list有多大判斷失誤, 自己算着超過long long範圍了.希望吸取教訓

#include <cstdio>
#include <algorithm>

using namespace std;
typedef long long ll;
ll ans = 0;
void query(ll n, ll l, ll r, ll x, ll y){
if(l > r || x > y) return;
ll mid = (x + y) / 2;
if(mid > r) query(n / 2, l, r, x, mid - 1);
else if(mid < l) query(n / 2, l, r, mid + 1, y);
else{
ans += (n % 2);
query(n / 2, l, r, x, mid - 1);
query(n / 2, l, r, mid + 1, y);
}
}

int main() {
ll n, l, r, len;
scanf("%lld%lld%lld", &n, &l, &r);
len = 1;
ll t = n;
while(t >= 2){
len = len * 2ll;
t >>= 1;
}
len = len * 2ll - 1ll;
query(n, l, r, 1, len);
printf("%lld\n", ans);
return 0;
}

C
這題的循環節.... 對數字太不暝感了.

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <utility>
using namespace std;

typedef long long ll;
const int qq = 1e5 + 10;
int n, m, k;
int maxn[qq];
int minx[qq];
int num[qq];

int main(){
scanf("%d%d%d", &n, &m, &k);
for(int i = 0; i < n; ++i) scanf("%d", num + i);
sort(num, num + n);
maxn[0] = num[n - 1];
minx[0] = num[0];
if(m == 0){
printf("%d %d\n", num[0], num[n - 1]);
return 0;
}
int t;
for(t = 1; t <= m; ++t){
for(int j = 0; j < n; ++j)
num[j] ^= k;
sort(num, num + n);
maxn[t] = num[n - 1];
minx[t] = num[0];
if(t >= 2 && maxn[t] == maxn[t - 1] && maxn[t - 1] == maxn[t - 2] && minx[t] == minx[t - 1] && minx[t - 1] == minx[t - 2])
break;
}
printf("%d %d\n", minx[t], maxn[t]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐