您的位置:首页 > 其它

Educational Codeforces Round 33 (Rated for Div. 2)

2017-11-24 20:51 543 查看
A

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <utility>
#include <bitset>

using namespace std;
#define LL long long
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define lson (rt << 1)
#define rson ((rt << 1) | 1)
#define pill pair<int, int>
#define mst(a, b) memset(a, b, sizeof a)
#define REP(i, x, n) for(int i = x; i <= n; ++i)
const int MOD = 1e9 + 7;
const int qq = 100 + 10;
const LL INF = 1e18 + 10;

int main(){
int n; scanf("%d", &n);
int a = 1, b = 2;
bool f = true;
while(n--) {
int x; scanf("%d", &x);
if(x != a && x != b) f = false;
if(x == a) {
b = 6 - (a + b);
} else if(x == b) {
a = 6 - (a + b);
}
}
if(f) puts("YES");
else puts("NO");
return 0;
}

B

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <utility>
#include <bitset>

using namespace std;
#define LL long long
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define lson (rt << 1)
#define rson ((rt << 1) | 1)
#define pill pair<int, int>
#define mst(a, b) memset(a, b, sizeof a)
#define REP(i, x, n) for(int i = x; i <= n; ++i)
const int MOD = 1e9 + 7;
const int qq = 100 + 10;
const LL INF = 1e18 + 10;
int num[qq];

int main(){
int tot = 0;
for(int k = 0; ; k++) {
int tmp = k + 1;
int ans = 0, cnt = k;
while(tmp > 0) {
ans += (1 << cnt);
cnt++;
tmp--;
}
if(ans > 1e5) break;
num[tot++] = ans;
}
int n; scanf("%d", &n);
int maxn = 1;
for(int i = 0; i < tot; ++i) {
if(n % num[i] == 0 && n >= num[i]) maxn = num[i];
}
printf("%d\n", maxn);
return 0;
}

C
好像做过很多次了

并查集维护集合,集合中只要有一个人听到谣言其他人都可以知道谣言所以每个集合取最下的贡献即可

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <utility>
#include <bitset>

using namespace std;
#define LL long long
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define lson (rt << 1)
#define rson ((rt << 1) | 1)
#define pill pair<int, int>
#define mst(a, b) memset(a, b, sizeof a)
#define REP(i, x, n) for(int i = x; i <= n; ++i)
const int MOD = 1e9 + 7;
const int qq = 1e5 + 10;
const int INF = 1e9 + 10;
int pre[qq], gold[qq];
int find(int x) {
return pre[x] == -1 ? x : pre[x] = find(pre[x]);
}
vector<int> g[qq];

int main(){
int n, m; scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i) {
scanf("%d", gold + i);
}
mst(pre, -1);
for(int i = 1; i <= m; ++i) {
int x, y; scanf("%d%d", &x, &y);
int a = find(x), b = find(y);
if(a != b) pre[b] = a;
}
for(int i = 1; i <= n; ++i) {
g[find(i)].pb(i);
}
LL sum = 0;
for(int i = 1; i <= n; ++i) {
if(g[i].size() == 0) continue;
int minx = INF;
for(int j = 0; j < g[i].size(); ++j) {
minx = min(minx, gold[g[i][j]]);
}
sum += minx * 1LL;
}
printf("%lld\n", sum);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: