CF Gym 100463B Music Mess (思路)
好题,当时想了半个小时,我往图论方面去想了,把出现过的字符串当场点,然后相互连边,那么就构成了一个三角形,一个大于三个点的连通分量里有以下结论:度为二的点可能是track,度为大于二的点一定不是track,当一个点连接一个可能是track的点和一个可能是artist的点,那么这个点就可能是ablum。然后我就卡在这里了,怎么求连通分量,怎么判断一个点一定是artist。还有形成的树的深度不能超过三,等等问题。
其实这样想不对,借助之前做A Lot of Joy 的思想,改下一思路,判断连通改成统计以下它在出现的次数。然后一个三元组一个三元组的考虑。考虑他们出现的次数,
有个结论:出现次数:artist>=album>=track
如果三个相等,那么就他们三个是可以相互替换的。如果两个出现次数多的结点次数相等,那么次数少的那个一定是作为track,剩下两个既可以当成track也可以当成artist;如果出现次数少的两个结点次数相等,那个次数多那个一定是artist,剩下两个既可以当成album也可以当成track。
- #include<cstdio>
- #include<cmath>
- #include<vector>
- #include<map>
- #include<set>
- #include<algorithm>
- //#include<iostream>
- #include<string>
- #include<cstring>
- using namespace std;
- //#define local
- const int maxn = ;
- map<string,int> mp;
- int vcnt;
- int ID(const string & x)
- {
- if(mp.count(x) == ){
- mp.insert(make_pair(x,vcnt));
- return vcnt++;
- }
- else return mp[x];
- }
- int cnt[maxn*];
- int smp[maxn][];
- int vec[][maxn*],sz[];
- void init(){
- vcnt = ;
- memset(cnt,,sizeof(cnt));
- ans[].clear();
- ans[].clear();
- ans[].clear();
- }
- bool cmp(int a,int b) { return cnt[a]<cnt[b]; }
- int main()
- {
- #ifdef local
- freopen("in.txt","r",stdin);
- //freopen("out.txt","w",stdout);
- #endif // local
- char buf[];
- int N;
- int cas = ;
- while(~scanf("%d",&N)&&N){
- init();
- for(int i = ; i < N; i++){
- for(int j = ; j < ; j++){
- scanf("%s",buf);
- smp[i][j] = ID(buf);
- cnt[smp[i][j]]++;
- }
- }
- mp.clear();
- for(int i = ; i < N; i++){
- sort(smp[i],smp[i]+,cmp);
- int tmp[] = { cnt[smp[i][]],cnt[smp[i][]],cnt[smp[i][]] };
- if(tmp[] == tmp[]){
- for(int k = ; k < ; k++)
- for(int j = ; j < ;j++ ) {
- ans[k].insert(smp[i][j]);
- }
- }else {
- if(tmp[] == tmp[]){
- ans[].insert(smp[i][]);
- ans[].insert(smp[i][]); ans[].insert(smp[i][]);
- ans[].insert(smp[i][]); ans[].insert(smp[i][]);
- } else if(tmp[] == tmp[]) {
- ans[].insert(smp[i][]);
- ans[].insert(smp[i][]); ans[].insert(smp[i][]);
- ans[].insert(smp[i][]); ans[].insert(smp[i][]);
- } else {
- ans[].insert(smp[i][]);
- ans[].insert(smp[i][]);
- ans[].insert(smp[i][]);
- }
- }
- }
- printf("Case %d: %d %d %d\n",++cas,ans[].size(),ans[].size(),ans[].size());
- }
- return ;
- }
CF Gym 100463B Music Mess (思路)的更多相关文章
- Codeforces Gym 100463B Music Mess Hash 逻辑题
Music Mess Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments ...
- CF Gym 102028G Shortest Paths on Random Forests
CF Gym 102028G Shortest Paths on Random Forests 抄题解×1 蒯板子真jir舒服. 构造生成函数,\(F(n)\)表示\(n\)个点的森林数量(本题都用E ...
- CF Gym 100187A Potion of Immortality (思路,最坏情况的最小损失)
根据兔子试药情况可以缩小范围,如果死了,不在试过的药里面,如果活着,在试过的药里. 最糟的情况: 两个原则 1.能确定魔药所在的范围的尽量大,2.死得兔子尽量多. 如果当前不知道情况的药n为k的二倍以 ...
- codeforces gym 100971 K Palindromization 思路
题目链接:http://codeforces.com/gym/100971/problem/K K. Palindromization time limit per test 2.0 s memory ...
- CF gym 101933 K King's Colors —— 二项式反演
题目:http://codeforces.com/gym/101933/problem/K 其实每个点的颜色只要和父亲不一样即可: 所以至多 i 种颜色就是 \( i * (i-1)^{n-1} \) ...
- CF gym 100962D Deep Purple [后缀树,树链剖分,线段树]
Codeforces 思路 感觉这个离线的思路好神仙啊qwq 对于每个询问\([l,r]\)其实就是要求\(p_{max}\),使得\(lcs(s[1,p],s[1,r])>p-l\),也就是\ ...
- CF gym 101933 K. King's Colors(二项式反演)
传送门 解题思路 首先给出的树形态没用,因为除根结点外每个点只有一个父亲,它只需要保证和父亲颜色不同即可.设\(f(k)\)表示至多染了\(k\)种颜色的方案,那么\(f(k)=(k-1)^{(n-1 ...
- cf Gym 101086M ACPC Headquarters : AASTMT (Stairway to Heaven)
题目: Description standard input/output As most of you know, the Arab Academy for Science and Technolo ...
- CF Gym 100685A Ariel
传送门 A. Ariel time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
随机推荐
- Spring入门第九课
使用外部属性文件 在配置文件里面配置Bean时,有时需要在Bean的配置里面混入系统部署的细节信息(例如:文件路径,数据源配置信息等)而这些部署细节实际上需要和Bean配置相分离. Spring提供了 ...
- Django 的 路由系统
Django 的路由系统 URL 配置(URLconf)就像Django 锁支撑网站的目录. 它的本质就是URL 与要为该URL 调用的视图函数之间的映射表. 你就是以这种方式告诉Django, 对于 ...
- rest framework 认证
一.简单认证示例 需求: 用户名密码正确:没有 token 则产生一个 token,有 token 则更新,返回登录成功: 若用户名或密码错误,返回错误信息. 1.models.py from dja ...
- 使用gRPC搭建Server端与Client端
gRPC简介 gRPC是一种RPC框架技术,采用Protocal Buffers(协议缓存) 作为其接口定义的语言(就是Proto来写接口)和基础的消息交换格式. 在gRPC中,客户端应用程序可以直接 ...
- PHP SOAP 提交XML
<?php $xmldata = <<<EOT <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap. ...
- 通过node.js读取html页面及其页面中引入的css样式
Node 是什么? Node 是一个基于Chrome V8 引擎的JavaScript 运行环境. Node 不是一种独立的语言.Node不是 JavaScript 框架, Node是一个除了浏览器之 ...
- HttpClient 应用案例揭破应用Discuss论坛登录
闲来无事,写了一个对discuss论坛登录的案例,初次上场按照以前的惯例没成功,见过抓包分析discuss论坛成功完成,废话不多说 直接上代码. 1:winform 做客户端,添加HttpClient ...
- react-native-video的使用
/** * Sample React Native App * https://github.com/facebook/react-native * * @format * @flow */ impo ...
- c#字符串字面量
分为两种: 1 常规字符串字面量 2逐字字面量字符串:以@字符为前缀.注意:注意逐字字面量唯一例外的是相邻的双引号组,它们被解释为单个双引号字符.
- Codeforces 140C(二分、构造)
要点 可以贪心选数量最多的那三个构造 二分的话里面的check我不太会.正解是既然当前答案为\(k\)个,那每个物品最多只会出现\(k\)次,多余的丢掉,剩下的总数如果大于等于\(3k\)则true. ...