UVA 10050

来源:互联网 发布:风景线打印软件设置 编辑:程序博客网 时间:2024/06/08 14:07

题目大意:各个国家要内乱,我们有一个工作的人,一旦有内乱,工作的人额外得到了假期,所有周五周六都是节假日。各个国家说好了隔几天内乱依次。有n个样例,每个样例计算k天内的额外放假天数,其中有m个国家,分别隔几天内乱,不同国家同天内乱,工作的人额外得到一天假期。在周五周六内乱,并没有多放假。在计算工作狂得到了多少额外的假期。

解题思路:分别计算第一个第二个第三个...国家对工作狂的额外放假天数。定义一个set记录哪天放过假。第一次该天放假,额外假期增加一,并将该天存入set;如果已经存在则额外假期不变化。针对一个国家对工作狂的额外放假天数为,循环内天数从第一天,每次增加内乱隔的天数。每次计算内乱是星期几,如果该天没有记录过,并且不是星期五星期六则额外假期增加一。

ac代码:

#include <iostream>#include <set>using namespace std;int sum;set <int> s;void count(int day, int h){int now=6;for (int i=h; i<=day; i+=h){now = (now + h) % 7;if (now != 6 && now != 5)if (s.count(i));elses.insert(i), sum++;}}int main(){int n, day, m, h[1000];cin >> n;while (n--){cin >> day >> m;sum = 0;for (int i=0; i<m; i++)cin >> h[i], count(day, h[i]);cout << sum << endl;s.clear();}return 0; } 
原创粉丝点击