SPOJ Problem 3375:Stamps

题目大意:你需要一拖邮票,你有一坨的朋友可以给你邮票,问最少要多少个朋友才能弄到邮票。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
bool comp(int x,int y){return x>y;}
int n,m,i,j,t,s;
int a[1005];
int main(){
    scanf("%d",&t);
    for (s=1;s<=t;s++){
        memset(a,0,sizeof(a));
        scanf("%d%d",&n,&m);
        for (i=1;i<=m;i++)
            scanf("%d",&a[i]);
        sort(a+1,a+m+1,comp);
        for (i=1;i<=m;i++){
            if (n<=a[i])break;
            n-=a[i];
        }
        if (i>m)
            printf("Scenario #%d:\nimpossible\n",s);
        else
            printf("Scenario #%d:\n%d\n",s,i);
        if(s<t)printf("\n");
    }
}
时间: 2024-10-09 20:54:23

SPOJ Problem 3375:Stamps的相关文章

素数筛法--SPOJ Problem 2 Prime Generator

质数(prime number)又称素数,除了1和它本身外,不能整除以其他自然数,换句话说就是该数除了1和它本身以外不再有其他的因数:否则称为合数.最小的质数是2. 要判断一个整数N是不是质数很简单,看它是否能被2到sqrt(N)之间的整数整除即可. def isPrime(n): if n%2==0: return False for i in xrange(3,int(math.sqrt(n)+1),2): if n%i==0: return False return True 不过要找出1

SPOJ Problem 7974:What&#39;s Next

求数列下一项,啥都不说了,贡献了N多WA... #include<cstdio> int main(){ int a,b,c; while(scanf("%d%d%d",&a,&b,&c)&&(a||b||c)){ if (b*2==c+a&&b!=a) printf("AP %d\n",2*c-b); else printf("GP %d\n",c*c/b); } return

SPOJ Problem 2: Prime Generator

嗯..在SPOJ上刷的第二题. 一开始不知道哪错了,后来发现i出现了两遍.. 因为m<10^9,所以用素数筛筛32000以内的数,开一个4000的数组存储就行.然后再从n开始用素数筛,总之效率还行. 代码如下: //0.01s 3.2M #include<cstdio> #include<cstring> #include<cmath> int n,i,j,t,m,k,tot; int a[100005],b[4000]; int prime[40000]; in

SPOJ Problem 9948:Will it ever stop

如题..http://www.spoj.com/problems/WILLITST/ #include<cstdio> long long n; int main(){ scanf("%lld",&n); while(n>1){ if (n==3||n==6){printf("NIE\n");return 0;} if (n&1)n=(n+1)/2*3;else n>>=1; } printf("TAK\n&q

SPOJ Problem 302:Count on Cantor

题目不复述了,自己看吧.http://www.spoj.com/problems/CANTON/一如既往的暴力.. #include<cstdio> int n,i,j,s,ans; int main(){ scanf("%d",&n); while(n--){ scanf("%d",&s); printf("TERM %d IS ",s); for (i=1;s>i;i++){ s-=i; } if (i&am

SPOJ Problem:A Game with Numbers

突然就看到SPOJ升级了,让我好不适应.. 这一一道博弈论的题目,可以先前面暴力一下,易得小于十的为必胜态,十的时候必败,然后11到19又必胜,而且发现只要各位为零且这个数不为零就必败. 再依次验证上百,上千的数.. #include<cstdio> #include<cstring> int n; int main(){ scanf("%d",&n); if (n%10==0&&n!=0)printf("2\n");

SPOJ Problem 379:Ambiguous Permutations

http://www.spoj.com/problems/PERMUT2/ 如题.. #include<cstdio> #include<cstring> int n,i,j; int a[100005]; int main(){ while(scanf("%d",&n)&&n){ for (i=1;i<=n;i++){ scanf("%d",&a[i]); } for (i=1;i<=n;i++)

SPOJ Problem 2727:Army Strength

题目在此  http://www.spoj.com/problems/ARMY/ 总体来说就是求最大值.. #include<cstdio> #include<cstring> int x,n,t,i,a,b; int max,pos; int main(){ scanf("%d",&t); while(t--){ scanf("%d%d",&a,&b); max=0; for (i=1;i<=a;i++){ s

SPOJ Problem:He is offside!

http://www.spoj.com/problems/OFFSIDE/ 阅读题.. #include<cstdio> #include<cstring> int x,a,b,c,n,m,i; int main(){ while(scanf("%d%d",&n,&m)&&(n+m)){ a=b=c=100000; for (i=1;i<=n;i++){ scanf("%d",&x); if (x