Educational Codeforces Round 9

632A - Grandma Laura and Apples    20171126

按照题意模拟即可

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long
LL n,p,h,k,f[41];
int main()
{
    scanf("%I64d%I64d",&n,&p);
    for(LL i=0;i<n;i++)
      {
      string s;cin>>s;
      f[n-i]=(s.size()>5);
      }
    for(LL i=1;i<=n;i++)k=k*2+f[i],h+=f[i];
    return printf("%I64d\n",(2*k-h)*p/2),0;
}
View Code

632B - Alice, Bob, Two Teams    20171126

扫一遍,再扫一遍_(:з」∠)_

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
long long n,p[500001],_,ans;
string s;
int main()
{
    scanf("%I64d",&n);
    for(int i=1;i<=n;i++)
      scanf("%I64d",&p[i]);
    cin>>s;
    for(int i=1;i<=n;i++)
      _+=(s[i-1]=='B')*p[i],ans=_;
    for(int i=1;i<=n;i++)
      if(s[i-1]=='A')
        _+=p[i],ans=max(ans,_);
      else _-=p[i];
    _=0;
    for(int i=1;i<=n;i++)
      _+=(s[i-1]=='B')*p[i];
    for(int i=n;i>=1;i--)
      if(s[i-1]=='A')
        _+=p[i],ans=max(ans,_);
      else _-=p[i];
    return printf("%I64d\n",ans),0;
}
View Code

632C - The Smallest String Concatenation    20171126

sort一下再输出就好了

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
string s[50001];
int n;
bool cmp(string a,string b){return a+b<b+a;}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
      cin>>s[i];
    sort(s+1,s+n+1,cmp);
    for(int i=1;i<=n;i++)
      cout<<s[i];
    return printf("\n"),0;
}
View Code

632D - Longest Subsequence    20171126

记录每个数字有多少个在\(a\)内的因数即可

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#define N 1000001
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,l=1,k,a[N],cnt[N];
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
      {
      scanf("%d",&a[i]);
      if(a[i]<=m)cnt[a[i]]++;
      }
    for(int i=m;i>=1;i--)
      if(cnt[i])
        for(int j=2*i;j<=m;j+=i)
          cnt[j]+=cnt[i];
    for(int i=1;i<=m;i++)
      if(k<cnt[i])
        k=cnt[i],l=i;
    printf("%d %d\n",l,k);
    for(int i=1;i<=n;i++)
      if(l%a[i]==0)
        printf("%d ",i);
    return 0;
}
View Code

632E - Thief in a Shop    20171126

标解好像是FFT?

事实上好像一通乱搞就过了?

不知道怎么用语言描述我的做法,用心感受代码吧~

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#define N 1001
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,k,x,m,mi=1000,a[N],f[N*N];
vector<int>ans;
int main()
{
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
      scanf("%d",&x),a[x]=1,m=max(m,x),mi=min(mi,x);
    for(int i=1;i<N*N;i++)f[i]=k+1;
    for(int i=1;i<=m;i++)
      if(a[i])for(int j=i-mi;j<=m*k;j++)
        f[j]=min(f[j],f[j-i+mi]+1);
    for(int i=0;i<=m*k;i++)if(f[i]<=k)ans.push_back(i+mi*k);
    for(int i=0;i<ans.size();i++)
      printf("%d%c",ans[i],i==ans.size()-1?'\n':' ');
    return 0;
}
View Code

632F - Magic Matrix    20190312

bitset大法好!!!

#include<bits/stdc++.h>
using namespace std;
#define N 2501
#define GG return printf("NOT MAGIC\n"),0
bitset<N>f[N];
int n,m,a[N][N];
struct rua{int x,y,z;}w[N*N];
bool cmp(rua x,rua y){return x.z>y.z;}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        scanf("%d",&a[i][j]);
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        if(a[i][j]!=a[j][i] || a[i][i])GG;
    for(int i=1;i<=n;i++)
      for(int j=i+1;j<=n;j++)
        w[++m]={i,j,a[i][j]};
    sort(w+1,w+m+1,cmp);
    for(int i=1;i<=m;)
      {
      int j=i;
      while(j<=m && w[j].z==w[i].z)
        f[w[j].x][w[j].y]=f[w[j].y][w[j].x]=1,j++;
      while(i<j){if((f[w[i].x]|f[w[i].y]).count()<n)GG;i++;}
      }
    return printf("MAGIC\n"),0;
}
View Code

(就这样水掉了一轮_(:з」∠)_

猜你喜欢

转载自www.cnblogs.com/DeaphetS/p/10648102.html