@Dmaxiya
2018-08-17T10:30:19.000000Z
字数 2977
阅读 967
Codeforces
Contests 链接:Codeforces Round #450(Div.2)
过题数:3
排名:808/4629
给定平面直角坐标系上 个点的坐标,数据保证没有点在 轴上,问,是否存在这样一个点 ,删掉 之后,剩下的所有点,都在 轴的一侧。
扫一遍,记录 轴左边和右边的点的数量,如果其中一边的点的数量小于等于 ,就输出 ,否则就 。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cstring>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <algorithm>
#include <functional>
#include <iomanip>
using namespace std;
#define LL long long
int n;
int x, y;
int cntl, cntr;
int main() {
#ifdef LOCAL
freopen("test.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif // LOCAL
// ios::sync_with_stdio(false);
while(scanf("%d", &n) != EOF) {
cntl = cntr = 0;
for(int i = 0; i < n; ++i) {
scanf("%d%d", &x, &y);
if(x > 0) {
++cntr;
} else {
++cntl;
}
}
if(cntl == 0 || cntl == 1) {
printf("Yes\n");
} else if(cntr == 0 || cntr == 1) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return 0;
}
给定三个数字 ,求数字 在有理数 小数点后第几位,如果不存在,则输出 。
模拟除法计算即可,根据抽屉原理, ,在取模的过程中,取模的次数超过 ,就一定会取到相同的数字,所以最多做 次除法,就可以判断 是否在 的小数位中。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cstring>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <algorithm>
#include <functional>
#include <iomanip>
using namespace std;
#define LL long long
long long a, b, c;
int main() {
#ifdef LOCAL
freopen("test.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif // LOCAL
// ios::sync_with_stdio(false);
while(cin >> a >> b >> c) {
int ans = -1;
a = a % b;
for(int i = 1; i <= b; ++i) {
LL tmp = a * 10 / b;
if(tmp == c) {
ans = i;
break;
}
a = a * 10 % b;
}
cout << ans << endl;
}
return 0;
}
给定一个 个数字的排列,要删掉其中一个数字,使得这个排列中的 数最多, 数需要满足以下条件:
对于排列 ,如果存在一下标 对于任意的 ,都有 ,那么数字 就是一个 数。
计算删掉每个数字 后,对整个数列的 数的个数的贡献,如果 是 ,则删掉 后,对整个数列的贡献 ,如果 是 中的最大值,而 是其中的次大值,则删掉 后,对整个数列的贡献 ,最后跑一边,取贡献的最大值。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cstring>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <algorithm>
#include <functional>
#include <iomanip>
using namespace std;
#define LL long long
const int maxn = 100000 + 100;
int n, ans;
int num[maxn];
set<int> st;
set<int>::iterator it;
int Time[maxn];
int main() {
#ifdef LOCAL
freopen("test.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif // LOCAL
// ios::sync_with_stdio(false);
while(scanf("%d", &n) != EOF) {
st.clear();
memset(Time, 0, sizeof(Time));
for(int i = 1; i <= n; ++i) {
scanf("%d", &num[i]);
}
st.insert(num[1]);
--Time[num[1]];
for(int i = 2; i <= n; ++i) {
st.insert(num[i]);
it = st.end();
--it;
if(*it == num[i]) {
--Time[*it];
continue;
}
--it;
if(*it == num[i]) {
++it;
++Time[*it];
}
}
int Max = Time[1];
ans = 1;
for(int i = 2; i <= n; ++i) {
if(Time[i] > Max) {
Max = Time[i];
ans = i;
}
}
printf("%d\n", ans);
}
return 0;
}