abc249_a

题目翻译

两个人走路,一个 $a$ 秒走 $b$ 米,休息 $c$ 秒,一个 $d$ 秒走 $e$ 米,休息 $f$ 秒。问 $x$ 秒后,谁走得多。

题目思路

小学数学题。$a+c$ 为一循环,$d+f$ 为一循环。之后再处理剩余秒数。

AC 代码

void solve()
{
    int a,b,c,d,e,f,x;
    cin>>a>>b>>c>>d>>e>>f>>x;
    int asec=x%(a+c),arnd=x/(a+c),ameter;
    ameter=(arnd*a+min(a,asec))*b;
    int bsec=x%(d+f),brnd=x/(d+f),bmeter;
    bmeter=(brnd*d+min(d,bsec))*e;  
    if(bmeter==ameter)puts("Draw");
    else if(bmeter>ameter)puts("Aoki");
    else puts("Takahashi");
}

abc249_b

题目翻译

有一个字符串,如果它既出现了小写字母,也出现了大写字母,并且所有字母均不同,那么输出 Yes ,否则输出 No

题目思路

按题意模拟即可。

AC 代码

void solve()
{
    string s;
    bool low=0,upp=0,same=0;
    cin>>s;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]>='A'&&s[i]<='Z')upp=1;
        if(s[i]>='a'&&s[i]<='z')low=1;
        for(int j=0;j<i;j++)
            if(s[i]==s[j])
                same=1;
    }
    puts(same==0&&upp==1&&low==1?"Yes":"No");
}

abc249_c

题目翻译

$n$ 个字符串,随意选几个字符串,问选出的字符串中,恰好出现 $k$ 次的字母有多少。

题目思路

枚举每个字符串的可能,为不选,之后对选了的进行判断。

肯定不超时,最高只有 $2^{15}\times 26=851968$。

AC 代码

string s[20];
bool f[20];
int a[30];
int ans;
void dfs(int n,int dep,int k)
{
    if(dep==n)
    {
        for(int kk=0;kk<=1;kk++)
        {
            memset(a,0,sizeof(a));
            if(kk==0)f[n]=0;
            else f[n]=1;
            int sum=0;
            for(int i=1;i<=n;i++)
            {
                if(f[i]==1)
                {
                    for(int j=0;j<s[i].size();j++)
                    {
                        a[s[i][j]-'a'+1]++;
                    }
                }
            }
            for(int i=1;i<=26;i++)
            {
                if(a[i]==k)
                {
                    sum++;
                }
            }
            ans=max(ans,sum);
        }
    }
    else
    {
        f[dep]=1;
        dfs(n,dep+1,k);
        f[dep]=0;
        dfs(n,dep+1,k);
    }
}
void solve()
{
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>s[i];
    }
    dfs(n,1,k);
    cout<<ans<<endl;
}

abc249_d

题目翻译

输入 $n$ 个数字,选出三元组 $(i,j,k)$ 且 $\frac{a_i}{a_j}=a_k$。

题目思路

找出每个数字出现次数,枚举 $a_i$ 和 $a_k$。

AC 代码

int b[200005];
void solve()
{
    int n,maxx=-1,minn=200005;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        maxx=max(maxx,x);
        b[x]++;
    }
    long long ans=0;
    for(int i=1;i<=maxx;i++)
    {
        for(int j=i;j<=maxx;j+=i)
        {
            ans+=1LL*b[i]*b[j/i]*b[j];
        }
    }
    cout<<ans<<endl;
}
最后修改:2023 年 04 月 20 日
v我50吃疯狂星期四