Codeforces Round #270 A B C

ADesign Tutorial: Learn from Math

素数筛

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 100;
int a[N]={0};
int main(){
	int n;
	cin >> n;
	a[1] = 1;
	for(int i = 2; i*i <= n; i++){
		if(a[i] == 0){
			for(int j = i*i; j <= n; j += i){
				a[j] = 1;
			}
		}
	}

	for(int i = 2; i <= n; i++){
		if(a[i] && a[n-i]){
			cout << i << " " << n - i <<"\n";
			return 0;
		}
	}
	return 0;
}

  BDesign Tutorial: Learn from Life

贪心,从大到小,一次取k个,统计每次的楼层最高

#include<bits/stdc++.h>
using namespace std;
const int N = 2e3;

int n, k;
int a[N];
int main(){
	cin >> n >> k;
	for(int i = 0; i < n; i++){
		cin >> a[i];
	}
	sort(a, a + n);
	int sum = 0;
	for(int i = n-1; i >= 0 ; i-=k){
		sum += (a[i] - 1) * 2;
	}
	cout << sum << "\n";
	return 0;
}

  CDesign Tutorial: Make It Nondeterministic

模拟

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100;

int n;
char s1[N][60];
char s2[N][60];
int a[N];
int main(){
	cin >> n;
	for(int i = 1; i <= n; i++){
		cin >> s1[i] >> s2[i];
	}
	for(int i = 0; i < n; i++){
		cin >> a[i];
	}
	int p=3;//可以选任意一个为handle
	for(int i = 0; i < n-1; i++){
		bool b1=strcmp(s1[a[i]], s1[a[i+1]]) == -1;
		bool b2=strcmp(s2[a[i]], s1[a[i+1]]) == -1;
		bool b3=strcmp(s1[a[i]], s2[a[i+1]]) == -1;
		bool b4=strcmp(s2[a[i]], s2[a[i+1]]) == -1;
		if(p==3){
			if((b1|| b2) && (b3 || b4));
			else if(b1 || b2)
				p=1;//只能选第一个为handle
			else if(b3 || b4)
				p=2;//只能选第二个为handle
			else{
				cout<< "NO\n";
				return 0;
			}
		}
		else if(p == 2){
			if(b2 && b4)
				p=3;
			else if(b2)
				p=1;
			else if(b4)
				p=2;
			else{
				cout<< "NO\n";
				return 0;
			}
		}
		else if( p== 1){
			if(b1 && b3)
				p=3;
			else if(b1)
				p=1;
			else if(b3)
				p=2;
			else{
				cout<< "NO\n";
				return 0;
			}
		}
	}
	cout << "YES\n";
	return 0;
}

  

原文地址:https://www.cnblogs.com/YJing814/p/11179983.html

时间: 2024-10-10 13:20:43

Codeforces Round #270 A B C的相关文章

Codeforces Round #270

Codeforces Round #270 题目链接 A:我是筛了下素数.事实上偶数仅仅要输出4和x - 4,奇数输出9和x - 9就可以 B:贪心的策略,把时间排序后.取每k个的位置 C:贪心.每次遇到一个人尽量让他用字典序小的,假设不行就大的,假设还是不行就是矛盾了 D:先推断原来矩阵的对角线.和是否是对称矩阵,求出最小生成树后.dfs n次求出每两点之间的距离.然后你和原来的矩阵相比就能够了 代码: A: #include <cstdio> #include <cstring>

Codeforces Round #270(活用prim算法)

D. Design Tutorial: Inverse the Problem time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output There is an easy way to obtain a new task from an old one called "Inverse the problem": we give

Codeforces Round #270 D C B A

谈论最激烈的莫过于D题了! 看过的两种做法不得不ORZ,特别第二种,简直神一样!!!!! 1th:构造最小生成树. 我们提取所有的边出来按边排序,因为每次我们知道边的权值>0, 之后每次把边加入集合中,不断构造,类似  kruskal算法,构造出边后 再对每个点进行整张图的DFS求距离 复杂度O(N^2lgN):对所有边排序的复杂度. 1 #include<bits/stdc++.h> 2 3 #define N 2222 4 using namespace std; 5 typedef

Codeforces Round #270 D Design Tutorial: Inverse the Problem --MST + DFS

题意:给出一个距离矩阵,问是不是一颗正确的带权树. 解法:先按找距离矩阵建一颗最小生成树,因为给出的距离都是最短的点间距离,然后再对每个点跑dfs得出应该的dis[][],再对比dis和原来的mp是否一致即可. 首先还要判断一些东西.具体看代码吧. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #in

Codeforces Round #270 solution

A.Design Tutorial: Learn from Math 题意:给你一个大于12小于1e6的数,让你把这个数表示为两个合数之和. 解法:筛素数后枚举一个合数判断另一个是否是合数. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <map> 5 #include <string> 6 #include <set> 7 #in

Codeforces Round #270 D. Design Tutorial: Inverse the Problem

D. Design Tutorial: Inverse the Problem 与u最近的边肯定是与u直接相连的边,所以可以根据这个建树,然后就可以求树上两点之间的距离,判断是否全部匹配. 1 #define bug(x) cout<<#x<<" is "<<x<<endl; 2 #define IO std::ios::sync_with_stdio(0); 3 #include <bits/stdc++.h> 4 #def

Codeforces Round #279 (Div. 2) ABCD

Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name     A Team Olympiad standard input/output 1 s, 256 MB  x2377 B Queue standard input/output 2 s, 256 MB  x1250 C Hacking Cypher standard input/output 1 s, 256 MB  x740 D Chocolate standard input/

Educational Codeforces Round 21 G. Anthem of Berland(dp+kmp)

题目链接:Educational Codeforces Round 21 G. Anthem of Berland 题意: 给你两个字符串,第一个字符串包含问号,问号可以变成任意字符串. 问你第一个字符串最多包含多少个第二个字符串. 题解: 考虑dp[i][j],表示当前考虑到第一个串的第i位,已经匹配到第二个字符串的第j位. 这样的话复杂度为26*n*m*O(fail). fail可以用kmp进行预处理,将26个字母全部处理出来,这样复杂度就变成了26*n*m. 状态转移看代码(就是一个kmp

Codeforces Round #428 (Div. 2)

Codeforces Round #428 (Div. 2) A    看懂题目意思就知道做了 #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b; i>=a; --i