好题,当时想了半个小时,我往图论方面去想了,把出现过的字符串当场点,然后相互连边,那么就构成了一个三角形,一个大于三个点的连通分量里有以下结论:度为二的点可能是track,度为大于二的点一定不是track,当一个点连接一个可能是track的点和一个可能是artist的点,那么这个点就可能是ablum。然后我就卡在这里了,怎么求连通分量,怎么判断一个点一定是artist。还有形成的树的深度不能超过三,等等问题。

其实这样想不对,借助之前做A Lot of Joy 的思想,改下一思路,判断连通改成统计以下它在出现的次数。然后一个三元组一个三元组的考虑。考虑他们出现的次数,

有个结论:出现次数:artist>=album>=track

如果三个相等,那么就他们三个是可以相互替换的。如果两个出现次数多的结点次数相等,那么次数少的那个一定是作为track,剩下两个既可以当成track也可以当成artist;如果出现次数少的两个结点次数相等,那个次数多那个一定是artist,剩下两个既可以当成album也可以当成track。

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<vector>
  4. #include<map>
  5. #include<set>
  6. #include<algorithm>
  7. //#include<iostream>
  8. #include<string>
  9. #include<cstring>
  10.  
  11. using namespace std;
  12.  
  13. //#define local
  14. const int maxn = ;
  15.  
  16. map<string,int> mp;
  17. int vcnt;
  18. int ID(const string & x)
  19. {
  20. if(mp.count(x) == ){
  21. mp.insert(make_pair(x,vcnt));
  22. return vcnt++;
  23. }
  24. else return mp[x];
  25. }
  26.  
  27. int cnt[maxn*];
  28. int smp[maxn][];
  29. int vec[][maxn*],sz[];
  30.  
  31. void init(){
  32. vcnt = ;
  33. memset(cnt,,sizeof(cnt));
  34. ans[].clear();
  35. ans[].clear();
  36. ans[].clear();
  37. }
  38.  
  39. bool cmp(int a,int b) { return cnt[a]<cnt[b]; }
  40.  
  41. int main()
  42. {
  43. #ifdef local
  44. freopen("in.txt","r",stdin);
  45. //freopen("out.txt","w",stdout);
  46. #endif // local
  47. char buf[];
  48. int N;
  49. int cas = ;
  50. while(~scanf("%d",&N)&&N){
  51. init();
  52. for(int i = ; i < N; i++){
  53. for(int j = ; j < ; j++){
  54. scanf("%s",buf);
  55. smp[i][j] = ID(buf);
  56. cnt[smp[i][j]]++;
  57. }
  58. }
  59. mp.clear();
  60. for(int i = ; i < N; i++){
  61. sort(smp[i],smp[i]+,cmp);
  62. int tmp[] = { cnt[smp[i][]],cnt[smp[i][]],cnt[smp[i][]] };
  63. if(tmp[] == tmp[]){
  64. for(int k = ; k < ; k++)
  65. for(int j = ; j < ;j++ ) {
  66. ans[k].insert(smp[i][j]);
  67. }
  68. }else {
  69. if(tmp[] == tmp[]){
  70. ans[].insert(smp[i][]);
  71. ans[].insert(smp[i][]); ans[].insert(smp[i][]);
  72. ans[].insert(smp[i][]); ans[].insert(smp[i][]);
  73. } else if(tmp[] == tmp[]) {
  74. ans[].insert(smp[i][]);
  75. ans[].insert(smp[i][]); ans[].insert(smp[i][]);
  76. ans[].insert(smp[i][]); ans[].insert(smp[i][]);
  77. } else {
  78. ans[].insert(smp[i][]);
  79. ans[].insert(smp[i][]);
  80. ans[].insert(smp[i][]);
  81. }
  82. }
  83. }
  84.  
  85. printf("Case %d: %d %d %d\n",++cas,ans[].size(),ans[].size(),ans[].size());
  86. }
  87. return ;
  88. }

CF Gym 100463B Music Mess (思路)的更多相关文章

  1. Codeforces Gym 100463B Music Mess Hash 逻辑题

    Music Mess Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments ...

  2. CF Gym 102028G Shortest Paths on Random Forests

    CF Gym 102028G Shortest Paths on Random Forests 抄题解×1 蒯板子真jir舒服. 构造生成函数,\(F(n)\)表示\(n\)个点的森林数量(本题都用E ...

  3. CF Gym 100187A Potion of Immortality (思路,最坏情况的最小损失)

    根据兔子试药情况可以缩小范围,如果死了,不在试过的药里面,如果活着,在试过的药里. 最糟的情况: 两个原则 1.能确定魔药所在的范围的尽量大,2.死得兔子尽量多. 如果当前不知道情况的药n为k的二倍以 ...

  4. codeforces gym 100971 K Palindromization 思路

    题目链接:http://codeforces.com/gym/100971/problem/K K. Palindromization time limit per test 2.0 s memory ...

  5. CF gym 101933 K King's Colors —— 二项式反演

    题目:http://codeforces.com/gym/101933/problem/K 其实每个点的颜色只要和父亲不一样即可: 所以至多 i 种颜色就是 \( i * (i-1)^{n-1} \) ...

  6. CF gym 100962D Deep Purple [后缀树,树链剖分,线段树]

    Codeforces 思路 感觉这个离线的思路好神仙啊qwq 对于每个询问\([l,r]\)其实就是要求\(p_{max}\),使得\(lcs(s[1,p],s[1,r])>p-l\),也就是\ ...

  7. CF gym 101933 K. King's Colors(二项式反演)

    传送门 解题思路 首先给出的树形态没用,因为除根结点外每个点只有一个父亲,它只需要保证和父亲颜色不同即可.设\(f(k)\)表示至多染了\(k\)种颜色的方案,那么\(f(k)=(k-1)^{(n-1 ...

  8. 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 ...

  9. CF Gym 100685A Ariel

    传送门 A. Ariel time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

随机推荐

  1. Spring入门第九课

    使用外部属性文件 在配置文件里面配置Bean时,有时需要在Bean的配置里面混入系统部署的细节信息(例如:文件路径,数据源配置信息等)而这些部署细节实际上需要和Bean配置相分离. Spring提供了 ...

  2. Django 的 路由系统

    Django 的路由系统 URL 配置(URLconf)就像Django 锁支撑网站的目录. 它的本质就是URL 与要为该URL 调用的视图函数之间的映射表. 你就是以这种方式告诉Django, 对于 ...

  3. rest framework 认证

    一.简单认证示例 需求: 用户名密码正确:没有 token 则产生一个 token,有 token 则更新,返回登录成功: 若用户名或密码错误,返回错误信息. 1.models.py from dja ...

  4. 使用gRPC搭建Server端与Client端

    gRPC简介 gRPC是一种RPC框架技术,采用Protocal Buffers(协议缓存) 作为其接口定义的语言(就是Proto来写接口)和基础的消息交换格式. 在gRPC中,客户端应用程序可以直接 ...

  5. PHP SOAP 提交XML

    <?php $xmldata = <<<EOT <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap. ...

  6. 通过node.js读取html页面及其页面中引入的css样式

    Node 是什么? Node 是一个基于Chrome V8 引擎的JavaScript 运行环境. Node 不是一种独立的语言.Node不是 JavaScript 框架, Node是一个除了浏览器之 ...

  7. HttpClient 应用案例揭破应用Discuss论坛登录

    闲来无事,写了一个对discuss论坛登录的案例,初次上场按照以前的惯例没成功,见过抓包分析discuss论坛成功完成,废话不多说 直接上代码. 1:winform 做客户端,添加HttpClient ...

  8. react-native-video的使用

    /** * Sample React Native App * https://github.com/facebook/react-native * * @format * @flow */ impo ...

  9. c#字符串字面量

    分为两种: 1 常规字符串字面量 2逐字字面量字符串:以@字符为前缀.注意:注意逐字字面量唯一例外的是相邻的双引号组,它们被解释为单个双引号字符.

  10. Codeforces 140C(二分、构造)

    要点 可以贪心选数量最多的那三个构造 二分的话里面的check我不太会.正解是既然当前答案为\(k\)个,那每个物品最多只会出现\(k\)次,多余的丢掉,剩下的总数如果大于等于\(3k\)则true. ...