木子亚日乀  

A - Ice Tea Storehttp://agc019.contest.atcoder.jp/tasks/agc019_a

题意:买N升的饮料,然后商店有4种规格的饮料以及相对的价格,规格分别为0.25,0.5,1,2  ,价格分别为Q,H,S,D,然后问买N升不得不花多少钱及最小价格为多少? N,H,H,S,D都为整数。

思路:因为N为整数,所以要么买N/2*D+S,要么买N/2*D,所以不断往上更新规格为1,2的最小价格就行了。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
int main()
{
    ll q,h,s,d;
    ll n;
    scanf("%lld%lld%lld%lld",&q,&h,&s,&d);
    scanf("%lld",&n);
    h=min(q*2,h);
    s=min(h*2,s);
    d=min(s*2,d);
    if(n%2)
    printf("%lld\n",n/2*d+s);
    else
        printf("%lld\n",n/2*d);
    return 0;
}

B - Reverse and Comparehttp://agc019.contest.atcoder.jp/tasks/agc019_b

题意:给你一个字符串,然后你可以任意反转区间i-j的子串,每次只能反转一个字串,问可以得到多少个不相同的字符串。

思路:首先至少i!=j进行反转才有可能得到不同于起始的串,除去i!=j的情况,带上起始的串可以得到的串的总数为(1+2+。。。+n-1)+1,n为串的长度,然后重复的是哪些呢?经过观察,就是各个字母出现的次数的C(x,2)(x>=2),然后用总数减去就得到答案了。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
#define MAX 200005
#define ll long long
char s[MAX];
map<char,ll> vis;
ll c(ll x)
{
    if(x>=2)
    return x*(x-1)/2;
    else
        return 0;
}
int main()
{
    scanf("%s",s);
    ll n;
    n=strlen(s);
    for(int i=0;i<n;i++)
        vis[s[i]]++;
    ll ans=1;
    for(int i=1;i<n;i++)
        ans+=i;
    for(int i=0;i<26;i++)
        ans-=c(vis[i+'a']);
        printf("%lld\n",ans);
    return 0;
}

 

posted on 2017-09-29 18:51  木子亚日乀  阅读(186)  评论(0)    收藏  举报