首页 > 代码库 > USACO silver系列刷题记录

USACO silver系列刷题记录

bzoj 1606: [Usaco2008 Dec]Hay For Sale 购买干草

技术分享
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int read(){
    int ans=0,f=1,c=getchar();
    while(c<0||c>9){if(c==-) f=-1; c=getchar();}
    while(c>=0&&c<=9){ans=ans*10+(c-0); c=getchar();}
    return ans*f;
}
int h,n,f[50007],k;
int main()
{
    h=read(); n=read();
    f[0]=1;
    for(int i=1;i<=n;i++){
        k=read();
        for(int j=h;j>=k;j--) if(f[j-k]) f[j]=1;
    }
    for(int i=h;i>=0;i--)if(f[i]){printf("%d\n",i); break;}
    return 0;
}
View Code

 bzoj 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头

技术分享
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int read(){
    int ans=0,f=1,c=getchar();
    while(c<0||c>9){if(c==-) f=-1; c=getchar();}
    while(c>=0&&c<=9){ans=ans*10+(c-0); c=getchar();}
    return ans*f;
}
int n,f[1000007],v[100007],ans[1000007];
int main()
{
    n=read();
    for(int i=1;i<=n;i++) v[i]=read(),f[v[i]]++;
    for(int i=1;i<=(int)1e6;i++)if(f[i]){
        for(int j=i;j<=(int)1e6;j+=i) if(f[j]) ans[j]+=f[i];
    }
    for(int i=1;i<=n;i++) printf("%d\n",ans[v[i]]-1);
    return 0;
}
View Code

 

USACO silver系列刷题记录