Codeforces Round #326 (div2)

来源:互联网 发布:新歌声网络直播地址 编辑:程序博客网 时间:2024/06/09 21:52

1001.

题解:

Idea is a simple greedy, buy needed meat for i - th day when it's cheapest among days1, 2, ..., n.

So, the pseudo code below will work:

ans = 0price = infinityfor i = 1 to n      price = min(price, p[i])      ans += price * a[i]

Time complexity:

分析:感觉别人好有想法,贪心遍历一遍就有答案了,看到自己的代码怎一个蠢字了得!!

我的:

#include<bits/stdc++.h>#define LL long longusing namespace std;struct p{    int a,p,pos;    bool vis=false;}b[100003];bool cmp(p a,p b){    if(a.p==b.p)return a.pos<b.pos;    return a.p<b.p;}int main(){    int n;    LL ans=0;    scanf("%d",&n);    for(int i=0;i<n;i++){        scanf("%d%d",&b[i].a,&b[i].p);        b[i].pos=i;    }    sort(b,b+n,cmp);    for(int i=0;i<n;i++){        if(!b[i].vis){            ans+=b[i].a*b[i].p;            for(int j=i+1;j<n;j++){                if(!b[j].vis&&b[j].pos>b[i].pos){                    b[j].vis=true;                    ans+=b[j].a*b[i].p;                }            }        }    }    cout<<ans<<endl;    return 0;}

1002.

题解:

Find all prime divisors of n. Assume they arep1, p2, ..., pk (in). If answer isa, then we know that for each 1 ≤ i ≤ k, obviously a is not divisible bypi2 (and all greater powers ofpi). Soa ≤ p1 × p2 × ... × pk. And we know thatp1 × p2 × ... × pk is itself lovely. So,answer isp1 × p2 × ... × pk

Time complexity:

分析:跟我想的一样,求所有质因数相乘就是答案。

#include <bits/stdc++.h>#define LL long longusing namespace std;int main(){    LL n;    cin>>n;    LL ans=1;    for(LL i=2;i*i<=n;i++){        if(n%i==0){            ans*=i;            while(n%i==0)                n/=i;        }    }    if(n>1)ans*=n;    cout<<ans<<endl;    return 0;}

1003.

题解:不知道题解在说什么鬼,这题只需要计算相同的数字个数,如果能凑够2个x,就相当于一个x+1,按照这一想法敲就好,

#include<bits/stdc++.h>#define LL long longusing namespace std;const int maxn=10000006;int a[maxn];int main(){   // ios::sync_with_stdio(false);    int n,x;    cin>>n;    memset(a,0,sizeof(a));    for(int i=0;i<n;i++){        scanf("%d",&x);        a[x]++;    }    int ans=0;    for(int i=0;i<maxn;i++){        if(a[i]){            a[i+1]+=a[i]/2;            a[i]%=2;            if(a[i])                ans++;        }    }    cout<<ans<<endl;    return 0;}

1004.

分析:dp,不会

0 0