• Samara SAU ACM ICPC 2013-2014 Quarterfinal Qualification Contest


    A:

    简单题,因为题目中说了不会有数据相同;

     1 #include<cstdio>
     2 #include<algorithm>
     3 #define maxn 200005
     4 using namespace std;
     5 
     6 struct node
     7 {
     8     int a[3];
     9     int id;
    10     bool operator <(const node &t)const
    11     {
    12         return a[2]<t.a[2];
    13     }
    14 }no[maxn];
    15 
    16 int bb[maxn],cnt,n;
    17 
    18 int main()
    19 {
    20     scanf("%d",&n);
    21     int m2=0,m3=0;
    22     for(int i=0;i<n;i++)
    23     {
    24         no[i].id=i;
    25         scanf("%d%d%d",&no[i].a[0],&no[i].a[1],&no[i].a[2]);
    26         sort(no[i].a,no[i].a+3);
    27         if(m2<no[i].a[1])m2=no[i].a[1];
    28         if(m3<no[i].a[0])m3=no[i].a[0];
    29     }
    30     sort(no,no+n);
    31     for(int i=0;i<n;i++)
    32     {
    33         if(no[i].a[2]>=m2&&no[i].a[1]>=m3)
    34             bb[cnt++]=no[i].id;
    35     }
    36     printf("%d
    ",cnt);
    37     sort(bb,bb+cnt);
    38     for(int i=0;i<cnt;i++)printf("%d ",bb[i]+1);
    39     return 0;
    40 }
    View Code

    B:

    刚刚开始用了hash,错了,后来发现可以不用hash,把类似的字符串可以变成相同的字符串;

    然后一个map就可以解决!

    代码:

     1 #include<cstdio>
     2 #include<map>
     3 #include<cstring>
     4 #include<string>
     5 using namespace std;
     6 int cnt,vis[30];
     7 void hash(char *s)
     8 {
     9     cnt=1;
    10     memset(vis,0,sizeof vis);
    11     int l=strlen(s);
    12     for(int i=0;i<l;i++)
    13     {
    14         if(vis[s[i]-'a']==0)vis[s[i]-'a']=cnt++;
    15         s[i]=vis[s[i]-'a']+'a'-1;
    16     }
    17 }
    18 
    19 map<string,int>mp;
    20 char s[1000009];
    21 int main()
    22 {
    23     int n;
    24     long long ans=0;
    25     scanf("%d",&n);
    26     for(int i=0;i<n;i++)
    27     {
    28         scanf("%s",s);
    29         hash(s);
    30         mp[s]++;
    31     }
    32     map<string,int>::iterator it;
    33     for(it=mp.begin();it!=mp.end();it++)
    34     {
    35         long long k=it->second;
    36         ans+=k*(k-1)/2;
    37     }
    38     printf("%I64d",ans);
    39     return 0;
    40 }
    View Code

    C:

    直接累加,看前面有多少的累加和与当前的相差为s;

    用map好方便的!

    代码:

     1 #include<cstdio>
     2 #include<map>
     3 #define ll long long
     4 using namespace std;
     5 
     6 map<ll,int>mp;
     7 
     8 int main()
     9 {
    10     int n;
    11     ll x,s,sum=0,ans=0;
    12     scanf("%d%I64d",&n,&s);
    13     mp[sum]=1;
    14     for(int i=1; i<=n; i++)
    15     {
    16         scanf("%I64d",&x);
    17         sum+=x;
    18         if(mp.find(sum-s)!=mp.end())ans+=mp[sum-s];
    19         mp[sum]=mp[sum]+1;
    20     }
    21     printf("%I64d",ans);
    22 }
    View Code

     D:

    超级easy的题

    代码:

     1 #include<cstdio>
     2 #define maxn 200006
     3 using namespace std;
     4 
     5 char a[maxn],b[maxn],c[maxn];
     6 
     7 int main()
     8 {
     9     int n;
    10     scanf("%d",&n);
    11     scanf("%s%s%s",a,b,c);
    12     for(int i=0;i<n;i++)
    13     {
    14         if(a[i]==b[i])putchar(a[i]);
    15         else if(b[i]==c[i])putchar(b[i]);
    16         else putchar(c[i]);
    17     }
    18     return 0;
    19 }
    View Code

     F:

    一个比较简单的二分!

    代码:

     1 #include<iostream>
     2 #include<algorithm>
     3 #define maxn 200005
     4 #define ll long long
     5 using namespace std;
     6 ll a[maxn];
     7 
     8 int main()
     9 {
    10     int n;
    11     ll l=1,r=0,p,q;
    12     cin>>n>>p>>q;
    13     for(int i=0; i<n; i++)
    14     {
    15         cin>>a[i];
    16         r=max(r,a[i]);
    17     }
    18     if(p==q)
    19     {
    20         ll cnt=r/p;
    21         if(r%p)cnt++;
    22         cout<<cnt<<endl;
    23         return 0;
    24     }
    25     while(l<=r)
    26     {
    27         ll mid=(l+r)/2;
    28         ll cnt=0;
    29         for(int i=0; i<n; i++)
    30         {
    31             if(a[i]-mid*q<=0)
    32                 continue;
    33             cnt+=(a[i]-mid*q)/(p-q);
    34             if((a[i]-mid*q)%(p-q)!=0)
    35                 cnt++;
    36         }
    37         if(cnt>mid)l=mid+1;
    38         else r=mid-1;
    39     }
    40     cout<<r+1ll<<endl;
    41     return 0;
    42 }
    View Code

     I:

    优先队列的应用,没想到啊!

    代码:

     1 #include<iostream>
     2 #include<queue>
     3 using namespace std;
     4 
     5 priority_queue<int>q;
     6 int main()
     7 {
     8     int n,t,d,ans=0,cnt=0;
     9     cin>>n;
    10     while(n--)
    11     {
    12         cin>>t>>d;
    13         cnt+=d;
    14         q.push(d);
    15         if(cnt>t)
    16         {
    17             cnt-=q.top();
    18             ans++;
    19             q.pop();
    20         }
    21     }
    22     cout<<ans;
    23 }
    View Code

    J:

    简单题:

    代码:

     1 #include<map>
     2 #include<iostream>
     3 #include<algorithm>
     4 using namespace std;
     5 pair<int,int>a,b=make_pair(-1,-1);
     6 
     7 int main()
     8 {
     9     int n,ans=0;
    10     cin>>n;
    11     for(int i=0;i<n;i++)
    12     {
    13         cin>>a.first>>a.second;
    14         if(a.first>b.first)b=a;
    15         ans=max(ans,b.second);
    16     }
    17     cout<<ans;
    18     return 0;
    19 }
    View Code

     L:

    利用dp的思想,先从最小的开始,大的反正是最小的的组合;

    代码:

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<map>
     4 #include<vector>
     5 using namespace std;
     6 
     7 vector<int>ve;
     8 map<int,int>m;
     9 
    10 int n;
    11 int main()
    12 {
    13     cin>>n;
    14     for(int i=2; i*i<=n; i++)if(n%i==0)
    15         {
    16             ve.push_back(i);
    17             if(i*i!=n)ve.push_back(n/i);
    18         }
    19     sort(ve.begin(),ve.end());
    20     for(int i=0; i<ve.size(); i++)
    21     {
    22         m[ve[i]]=ve[i]/2+1;
    23         for(int j=0; j<i; j++)
    24             if(ve[i]%ve[j]==0)
    25                 m[ve[i]]=min(m[ve[i]],(m[ve[i]/ve[j]])*(m[ve[j]]));
    26     }
    27     int mi=n/2+1;
    28     for(int i=0;i<ve.size();i++)
    29         if(mi>m[ve[i]]*m[n/ve[i]])mi=m[ve[i]]*m[n/ve[i]];
    30     cout<<mi;
    31 }
    View Code
  • 相关阅读:
    org.tinygroup.ehcache-EhCache缓存解决方案
    org.tinygroup.validate-验证框架
    org.tinygroup.context-上下文环境
    org.tinygroup.commons-常用工具类
    org.tinygroup.context2object-参数对象构建
    org.tinygroup.config-统一应用配置
    org.tinygroup.binarytree-二叉树
    org.tinygroup.service-服务
    flask之wtform与flask-session组件
    Flask信号源码流程
  • 原文地址:https://www.cnblogs.com/yours1103/p/3381404.html
Copyright © 2020-2023  润新知