codeforces C. Design Tutorial: Make It Nondeterministic

题意:每一个人 都有frist name 和 last name! 从每一个人的名字中任意选择
first name 或者 last name 作为这个人的编号!通过对编号的排序,得到每一个人
最终顺序!比较中的序列能否得到给定输出的序列一致!

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<string>
 5 #include<map>
 6 #include<algorithm>
 7 #define N 100005
 8 using namespace std;
 9
10 int p[N];
11 string name[2*N];
12 map<string, int>mp;//将每一个人名字映射到是第几个人
13
14
15 int main(){
16     int n;
17     int cnt=0;
18     cin>>n;
19     for(int i=1; i<=n; ++i){
20         cin>>name[cnt++]>>name[cnt++];
21         mp.insert(make_pair(name[cnt-2], i));
22         mp.insert(make_pair(name[cnt-1], i));
23     }
24     for(int i=1; i<=n; ++i)//每个人的排序之后的序列
25         cin>>p[i];
26     sort(name, name+cnt);//排序
27     int k = 1;
28     for(int i=0; i<cnt; ++i)//贪心
29         if(mp[name[i]] == p[k]){
30             ++k;
31             if( k > n) break;
32         }
33     if(k>n) cout<<"YES";
34     else cout<<"NO";
35     cout<<endl;
36     return 0;
37 }

时间: 2024-08-28 17:59:37

codeforces C. Design Tutorial: Make It Nondeterministic的相关文章

codeforces D. Design Tutorial: Inverse the Problem

题意:给定一个矩阵,表示每两个节点之间的权值距离,问是否可以对应生成一棵树, 使得这棵树中的任意两点之间的距离和矩阵中的对应两点的距离相等! 思路:我们将给定的矩阵看成是一个图,a 到 b会有多条路径, 如果存在一棵树,那么 这个树中a->b的距离一定是这个图中所有a->b中路径长度最短的一条!所以我们根据边权, 建立一棵MST树!再将MST树中的任意两点之间的距离求出来,看是否和矩阵中的对应的节点 对距离相同! 1 #include<iostream> 2 #include<

codeforces B. Design Tutorial: Learn from Life

题意:有一个电梯,每一个人都想乘电梯到达自己想要到达的楼层!从a层到b层的时间是|a-b|, 乘客上下电梯的时间忽略不计!问最少需要多少的时间....     这是一道神题啊,自己的思路不知不觉的就按照注解的思路走了,想着用优先队列模拟一下,可能还是没有模拟好吧,一直哇!但是同学的优先队列模拟过了! 没想到是greedy算法简单的几行就解决了! 1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 #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 472(#270 ) D Design Tutorial: Inverse the Problem

题意:给你一棵数的距离矩阵,问你这个矩阵是否合法 解题思路:利用树的性质进行prime 和连边,产生最小生成树,最后看最小生成树是否和给出的一致就行 解题代码: 1 // File Name: d.cpp 2 // Author: darkdream 3 // Created Time: 2014年09月29日 星期一 00时45分45秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include&l

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

【CF】270D Design Tutorial: Inverse the Problem

题意异常的简单.就是给定一个邻接矩阵,让你判定是否为树.算法1:O(n^3).思路就是找到树边,原理是LCA.判断树边的数目是否为n-1.39-th个数据T了,自己测试2000跑到4s.算法2:O(n^2).思考由图如何得到树,显然MST是可行的.因此,题目变为直接找到MST.然后通过树边构建目标矩阵.判定矩阵是否相等. 1 /* 472D */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #

codeforce A. Design Tutorial: Learn from Math

题意:将一个数拆成两个合数的和, 输出这两个数!(这道题做的真是TMD水啊)开始的时候不知道composite numbers是啥意思,看了3遍才看懂.... 看懂之后又想用素数筛选法来做,后来决定单个判断一个数是否为素数的方法来写,结果写错了两次,快疯掉了简直.... 1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 #include<algorithm> 5 #include<c

【CF472G】Design Tutorial 压位

题目大意 给出两个\(01\)序列\(A\)和\(B\) 汉明距离定义为两个长度相同的序列中,有多少个对应位置上的数字不一样 \(00111\) 和 \(10101\)的距离为\(2\) \(Q\)次询问,每次询问给出\(p_1,p_2,len\) 求\(a_{p_1},a_{p_1+1}\ldots a_{p_1+len?1}\)和\(b_{p_1},b_{p_1+1}\ldots b_{p_1+len?1}\)两个子串的汉明距离 \(n\leq 2\times{10}^5,q\leq 4\t

codeforces #270 ABCD

Codeforces Round #270 A - Design Tutorial: Learn from Math 题意:给出n,求出两个合数x和y使x+y=n. 题解:暴力筛合数,然后暴力找 1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include<cstdio> 3 #include<cmath> 4 #include<iostream> 5 #include<