【codeforce】B. Flag Day
来源:互联网 发布:手机赚钱软件,提现微信 编辑:程序博客网 时间:2024/05/21 09:08
原题:http://codeforces.com/contest/357/problem/B
分析:思维题。先给第一组的三个人分别分配1,2,3,然后从第二组开始遍历,如果三个人都没出现过,则按顺序分配1,2,3,如果有一个人出现过,则其他两个人分配与之不同的号码或者成为颜色。因为题目中有限制,“ each dance has at most one dancer who has danced in some previous dance”,每组中不会出现有两个或者以上的人在前面演出中出现。另外,题目中说明有解,因此不用检查最后的分配结果是否合理。
代码:
#include <iostream>#include <vector>using namespace std;vector<int> Solution(int num[][3],int n,int m);int main(){ int n,m; cin >> n >> m; int num[m][3]; for(int i=0 ; i<m ; i++){ cin >> num[i][0] >> num[i][1] >> num[i][2]; } vector<int>result = Solution(num,n,m); for(vector<int>::size_type i=0 ; i!=result.size() ; i++){ cout << result[i] << " "; } cout << endl; return 0;}vector<int> Solution(int num[][3],int n,int m){ vector<int> ret(n+1,0); ret.at(num[0][0]) = 1; ret.at(num[0][1]) = 2; ret.at(num[0][2]) = 3; for(int i=1 ; i<m ; i++){ if(ret.at(num[i][0]) != 0){ ret.at(num[i][1]) = (ret.at(num[i][0]))%3+1; ret.at(num[i][2]) = (ret.at(num[i][1]))%3+1; } else if(ret.at(num[i][1]) != 0){ ret.at(num[i][0]) = (ret.at(num[i][1]))%3+1; ret.at(num[i][2]) = (ret.at(num[i][0]))%3+1; } else if(ret.at(num[i][2]) != 0){ ret.at(num[i][1]) = (ret.at(num[i][2]))%3+1; ret.at(num[i][0]) = (ret.at(num[i][1]))%3+1; } else{ ret.at(num[i][0]) = 1; ret.at(num[i][1]) = 2; ret.at(num[i][2]) = 3; } } ret.erase(ret.begin()); return ret;}
总结:1.开始时总想分配时要不要按指定顺序,即编号最小的分配1,最大的分配3,但后来发现顺序无关紧要,最多只是三种颜色的人相互交换下颜色而已。
2.在分配给第二组和以后各组颜色时,在想要不要考虑每组中已分配的人数,例如0人,一人,两人或者三人,这样的话,情况会很多(8种),写代码时很复杂。后来再看一遍题之后,发现最多后面两种情况不可能,因此只会有四种情况。仔细看题!!
3.在具体分配时,开始用的代码是ret.at(num[i][1]) = (ret.at(num[i][0])+1)%3;这样会出现0代替3的情况,然后纠正后改为ret.at(num[i][1]) = (ret.at(num[i][0]))%3+1;就符合要求了。
没有高深的算法,还是锻炼思维。
- 【codeforce】B. Flag Day
- B. Flag Day
- codeforces 357B Flag Day
- codeforces#357B. Flag Day
- CodeForces#207Div.2 - B. Flag Day
- codeforce B. Bash's Big Day
- codeforce 837B Flag of Berland(矩形判断)
- Code Forces 357 B. Flag Day 暴力map
- flag for codeforce
- Flag Day: xVM version updated
- Codeforce # B Sequence Formatting
- codeforce 298 B Sail
- codeforce B. Road Construction
- CodeForce 126B
- codeforce #247 B(div2)
- codeforce 6B dfs
- codeforce 7B
- codeforce 9B
- C#作为客户端调用gsoap生成的C++服务端
- WiEngine介绍
- 快速搭建MongoDB分片集群
- IsKindOf()函数
- Android4.0 源代码目录结构
- 【codeforce】B. Flag Day
- 第一次创业,真的是很那个的(转自cnblogs)
- java 对象转 json 和 xml
- 内存管理由mrc转为arc
- linux socket服务器框架
- 菜鸟学Linux------代码编译问题
- 一般函数指针和类的成员函数指针
- Ubuntu 10.04 64bit 安装adb
- 获得Android系统所有已安装的应用并联网自动检测升级更新