KEYENCE Programming Contest 2019 自闭记

  A:签到。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
    int x=0,f=1;char c=getchar();
    while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
    while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x*f;
}
int a[4];
int main()
{
    //freopen("a.in","r",stdin);
    //freopen("a.out","w",stdout);
    for (int i=0;i<4;i++) a[i]=read();
    sort(a,a+4);
    if (a[0]==1&&a[1]==4&&a[2]==7&&a[3]==9) cout<<"YES";
    else cout<<"NO";
}
View Code

  B:签到*2。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
    int x=0,f=1;char c=getchar();
    while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
    while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x*f;
}
char s[110];
int n;
int main()
{
    //freopen("a.in","r",stdin);
    //freopen("a.out","w",stdout);
    scanf("%s",s);n=strlen(s);
    char a[]="keyence";
    if (n<7) cout<<"NO";
    else
    {
        int x=0,y=0;
        for (int i=0;i<7;i++) if (s[i]==a[i]) x++;else break;
        for (int i=n-1;i>n-8;i--) if (s[i]==a[7-(n-i)]) y++;else break;
        if (x+y>=7) cout<<"YES";
        else cout<<"NO";
    }
}
View Code

  C:按ai-bi从小到大排序,依次将剩余最多的分配给需求最大的即可。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 100010
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
    int x=0,f=1;char c=getchar();
    while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
    while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x*f;
}
int n,c[N];
ll ans;
struct data
{
    int x,y;
    bool operator <(const data&a) const
    {
        return x-y<a.x-a.y;
    }
}a[N];
int main()
{
    //freopen("a.in","r",stdin);
    //freopen("a.out","w",stdout);
    n=read();
    for (int i=1;i<=n;i++) a[i].x=read();
    for (int i=1;i<=n;i++) a[i].y=read();
    sort(a+1,a+n+1);
    for (int i=1;i<=n;i++) c[i]=a[i].x;
    for (int i=1;i<=n;i++) ans+=a[i].x-a[i].y;
    if (ans<0) {cout<<-1;return 0;}
    int x=n,ans=0;
    for (int i=1;i<=n;i++)
    {
        if (a[i].x>=a[i].y) break;
        while (a[i].y-a[i].x>a[x].x-a[x].y)
        {
            a[i].x+=a[x].x-a[x].y;
            a[x].x=a[x].y;
            x--;
        }
        a[x].x-=a[i].y-a[i].x,a[i].x=a[i].y;
    }
    for (int i=1;i<=n;i++) if (c[i]!=a[i].x) ans++;
    cout<<ans;
}
View Code

  D:按数从大到小考虑,如果其作为某行最大值出现就会多一行被占领,列同理。记录当前被占领的行和列的数量,每次考虑填当前数的方案数,根据其是否在行列最大值中出现,分类讨论一下,给答案乘上这个方案数即可。这个弱智的不行的讨论写了我一年。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 1010
#define P 1000000007
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
    int x=0,f=1;char c=getchar();
    while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
    while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
    return x*f;
}
int n,m,a[N],b[N],posa[N*N],posb[N*N],ans;
int row,line;
int main()
{
    //freopen("a.in","r",stdin);
    //freopen("a.out","w",stdout);
    n=read(),m=read();
    for (int i=1;i<=n;i++)
    {
        a[i]=read();
        if (posa[a[i]]) {cout<<0;return 0;}
        posa[a[i]]=i;
    }
    for (int i=1;i<=m;i++)
    {
        b[i]=read();
        if (posb[b[i]]) {cout<<0;return 0;}
        posb[b[i]]=i;
    }
    row=0,line=0;ans=1;
    for (int i=n*m;i>=1;i--)
    {
        if (posa[i]&&posb[i]) {row++,line++;continue;}
        if (!posa[i]&&!posb[i])
        {
            if (row*line-(n*m-i)<=0) {cout<<0;return 0;}
            ans=1ll*ans*(row*line-(n*m-i))%P;
        }
        if (posa[i]) ans=1ll*ans*line%P,row++;
        if (posb[i]) ans=1ll*ans*row%P,line++;
    }
    cout<<ans;
}
View Code

  result:rank 241 rating +19

猜你喜欢

转载自www.cnblogs.com/Gloid/p/10264290.html