zoukankan      html  css  js  c++  java
  • AIM Tech Round 4 (Div. 2)

    A题

    分析:暴力

     1 #include "iostream"
     2 #include "cstdio"
     3 #include "cstring"
     4 #include "string"
     5 using namespace std;
     6 const int maxn=100+10;
     7 int vis[maxn],n;
     8 string s;
     9 int main()
    10 {
    11     cin>>s;
    12     cin>>n;
    13     int len=s.length();
    14     for(int i=0;i<len;i++){
    15         vis[s[i]-'a']++;
    16     }
    17     if(len<n){
    18         cout<<"impossible"<<endl;
    19     }else{
    20         int num=0;
    21         for(int i=0;i<30;i++){
    22             if(vis[i])
    23                 num++;
    24         }
    25         if(num>=n)
    26             cout<<"0"<<endl;
    27         else
    28             cout<<(n-num)<<endl;
    29     }
    30     return 0;
    31 }
    View Code

    B题

    分析:求不同set的个数,同一个set的元素必须相同,而且是同一行,同一列的。所以对每行,每列,求有多少个0,多少个1,然后集合个数位(2^k-1),最后所有的单个元素都被算了两次,所以最后结果在减去n*m

     1 #include "iostream"
     2 #include "cstdio"
     3 #include "cstring"
     4 #include "string"
     5 #include "vector"
     6 #include "cmath"
     7 using namespace std;
     8 const int maxn=100+10;
     9 int n,m;
    10 int a[maxn][maxn];
    11 struct Node
    12 {
    13     int zero,one;
    14 };
    15 vector<Node>p;
    16 int main()
    17 {
    18     cin>>n>>m;
    19     for(int i=1;i<=n;i++)
    20         for(int j=1;j<=m;j++)
    21             cin>>a[i][j];
    22     for(int i=1;i<=n;i++){
    23         int num0=0,num1=0;
    24         for(int j=1;j<=m;j++){
    25             if(a[i][j]==1)
    26                 num1++;
    27             else
    28                 num0++;
    29         }
    30         Node e;
    31         e.zero=num0,e.one=num1;
    32         p.push_back(e);
    33     }
    34     for(int j=1;j<=m;j++){
    35         int num0=0,num1=0;
    36         for(int i=1;i<=n;i++){
    37             if(a[i][j]==1)
    38                 num1++;
    39             else
    40                 num0++;
    41         }
    42         Node r;
    43         r.zero=num0,r.one=num1;
    44         p.push_back(r);
    45     }
    46     long long res=0;
    47     for(int i=0;i<p.size();i++){
    48         res+=(long long)pow(2,p[i].zero)-(long long)1;
    49         res+=(long long)pow(2,p[i].one)-(long long)1;
    50     }
    51     res-=(n*m);
    52     cout<<res<<endl;
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    设置发光字
    QQ空间无导航条应对方法
    网页设计经典网站欣赏
    页面居中显示
    获取元素的绝对位置
    输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
    最长重复子字符串
    从头到尾彻底解析Hash 表算法
    求二叉树中节点的最大距离
    MySQL学习笔记——显示数据库信息
  • 原文地址:https://www.cnblogs.com/wolf940509/p/7523375.html
Copyright © 2011-2022 走看看