hdu 5504 5505

来源:互联网 发布:苹果电脑设计绘图软件 编辑:程序博客网 时间:2024/06/07 12:45

11.8

rigou阿,刚才都写好了结果手贱给关了,还tm没包存。

第一题,水题,注意处理零的情况,不用unsigned也能过,我反正没用。

#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;#define inf 1<<64 long long a[100];int main(){int T,n,flag=0,k; long long ans;long long tmp,x;scanf("%d",&T);/*ans=1;flag=0;tmp=-1000000000;*/while(T--){ans=1;flag=0;k=0;int zero=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%lld",&x);if(x>0){flag=1;ans*=x;}else if(x<0){                a[k++]=-x;}else {                zero=1;}}sort(a,a+k);for(int i=k-1;i>=0;i-=2){            if(i-1>=0) {                ans*=a[i];                ans*=a[i-1];                flag=1;            }            else break;}if(flag==1) {            if(zero==1&&ans<0) ans=0;            printf("%lld\n",ans);}else{            if(zero==1) printf("0\n");            else            printf("-%lld\n",a[0]);}}}
第二题,一开始想到的是搜索,但是好像会超时,因为他说n每次更新之后因子的也会发生变化,每次都重新求一边,想想就很费劲。

然后观察了一下,首先m%n一定要等于零,否则不可能变过去,然后,(瞄了一眼discuss,发现好像大体思路差不多,每次更新n用的是n和m/n的最大公约数,因为要求最少几步,然后每次都判断能不能变化。这里有个疑问为什么每次都要选gcd,其实仔细想一下,你选个其他的只有比gcd小的了,不能满足最少变化。所以,,,

注意这次要用unsigned。

#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;#define inf 1<<64 long long a[100];int main(){int T,n,flag=0,k; long long ans;long long tmp,x;scanf("%d",&T);/*ans=1;flag=0;tmp=-1000000000;*/while(T--){ans=1;flag=0;k=0;int zero=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%lld",&x);if(x>0){flag=1;ans*=x;}else if(x<0){                a[k++]=-x;}else {                zero=1;}}sort(a,a+k);for(int i=k-1;i>=0;i-=2){            if(i-1>=0) {                ans*=a[i];                ans*=a[i-1];                flag=1;            }            else break;}if(flag==1) {            if(zero==1&&ans<0) ans=0;            printf("%lld\n",ans);}else{            if(zero==1) printf("0\n");            else            printf("-%lld\n",a[0]);}}}


0 0
原创粉丝点击