回复 30楼 beyondyf
纠结了很久,终于ac了,这题的描述有一句是错的Each result could be stored as a 64bit signed integer.
=_=
程序代码:#include <stdio.h>
#include <math.h>
#define N 1000000
int arr[N];
void init()
{
int i,j;
for(i=2;i<sqrt(N);i++)
for(j=2;j<N/i;j++)
arr[i*j]=1;
}
int main()
{
long long n;
int i,first;
init();
while(scanf("%lld",&n) && n)
{
for(i=2,first=1;i<=n;i++)
{
if(!arr[i])
while(!(n%i))
{
printf(first ? "%d" : "*%d",i);
n/=i;
first=0;
}
}
printf("\n");
}
return 0;
}

程序代码:#include <stdio.h>
#define N 1005
int main()
{
int caseNum,n,m,i,ii,jj,tea,cof,time,idex[N];
scanf("%d",&caseNum);
while(caseNum--)
{
scanf("%d %d",&n,&m);
for(i=1,time=0;i<=n;i++) idex[i]=0;//初始化
time+=(m/7*47+(n-m)/7*47+n*4);//有多少个座位就得停留多少次(n*4),算出去几次供应机(m/7+(n-m)/7)
if(m%7) time+=47;//上边加的是正好7个人的,如果有余下的必须再加一次47
if((n-m)%7) time+=47;//同上
for(i=1;i<=m;i++)
{
scanf("%d",&ii);
idex[ii]=1;//喝茶的置1,喝咖啡的置0
}
for(i=n,ii=0,tea=0,cof=0;i>0;i--)//我觉得从大往小处理时间消耗最小
{
if(idex[i]) {tea++;ii=i;}
else {cof++;jj=i;}
if(tea==7) {time+=(i+6)*2;tea=0;}//每送7杯茶加一次往返时间
if(cof==7) {time+=(i+6)*2;cof=0;}//每送7杯咖啡加一次往返时间
}
if(tea%7) time+=(ii+tea%7-1)*2;//如果余下不够7杯茶加上其往返时间
if(cof%7) time+=(jj+cof%7-1)*2;//如果余下不够7杯咖啡加上其往返时间
printf("%d\n",time);
}
return 0;
}
程序代码:#include <iostream>
using namespace std;
#define Max 20010
int data[Max];
int n,p;
int main()
{
while (cin>>n>>p)
{
char ch;
for (int i=1; i<=n; i++) data[i]=(cin>>ch,ch-'0');
data[0]=10;
int top=0,end=1;
while (end<=n && p)
if (data[top]>=data[end]) data[++top]=data[end++];
else
{
top--; p--;
}
while (end<=n) data[++top]=data[end++];
for (int i=1; i<=top-p; i++) cout<<data[i];
cout<<endl;
}
}
程序代码:#include <iostream>
using namespace std;
int num,ans;
void swap(int &a,int &b)
{
int t=a;
a=b;
b=t;
}
class Node
{
private:
int depth;
int data[10010];
public:
void insert(int temp)
{
data[++depth]=temp;
int i=depth,j;
while (i>1)
{
j=i/2;
if (data[j]>data[i]) swap(data[i],data[j]);
i=j;
}
}
void init()
{
depth=0;
for (int i=1; i<=num; i++)
{
cin>>data[i];
insert(data[i]);
}
}
int getdata() { return data[1]; }
void del()
{
data[1]=data[depth--];
int i=1,j;
while (i*2<=depth)
{
j=i*2;
if (data[j]>data[j+1]&& j<depth) j++;
if (data[i]>data[j]) swap(data[j],data[i]);
i=j;
}
}
};
int main()
{
Node p;
while (cin>>num)
{
ans=0;
p.init();
while (--num)
{
int temp=p.getdata();
p.del();
temp+=p.getdata();
p.del();
ans+=temp;
p.insert(temp);
}
cout<<ans<<endl;
}
}
程序代码:#include <stdio.h>
long long gcd(long long a,long long b)
{
if(a < b) {a+=b; b=a-b; a-=b;}
if(b==0) return a;
else return gcd(b,a%b);
}
int main()
{
long long r,m;
while(scanf("%lld %lld",&r,&m) && (r+m))
printf("%lld\n",gcd(r,m));
return 0;
}
程序代码:#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100005
int password[MAX_SIZE];
void exchange(int a,int b)
{
for(;a<b;a++,b--)
{
password[a] += password[b];
password[b] = password[a] - password[b];
password[a] -= password[b];
}
}
int main()
{
int caseNum,n,m,a,b,i;
scanf("%d",&caseNum);
while(caseNum--)
{
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++) password[i]=i;
for(i=0;i<m;i++)
{
scanf("%d %d",&a,&b);
exchange(a,b);
}
for(i=1;i<=n;i++) printf(i-1 ? " %d" : "%d",password[i]);
printf("\n");
}
return 0;
}
程序代码:#include <iostream>
using namespace std;
int a[5010],flag[5010],n,s;
int cal()
{
int len=0,p=1%s;
for (int i=0; i<s; i++) flag[i]=0;
do
{
flag[p]=++len;
a[len]=p*10/s;
p=p*10%s;
}
while (p>0 && !flag[p]);
if (p==0)
if (n<=len) return a[n]; else return 0;
if (n<=flag[p]-1) return a[n]; else
if ((n-flag[p]+1)%(len+1-flag[p])==0) return a[len]; else
return a[(n-flag[p]+1)%(len+1-flag[p])+flag[p]-1];
}
int main()
{
while (cin>>s>>n,s!=0) cout<<cal()<<endl;
}
程序代码:#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10000
int dp[MAX_SIZE][MAX_SIZE],flag[MAX_SIZE][MAX_SIZE];
int girl[MAX_SIZE],boy[MAX_SIZE];
int maxx(int a,int b) { return a>b ? a : b;}
int LCS(int n,int m)
{
int i,j;
int len=maxx(n,m);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
flag[i][j]=0;
for(i=0;i<=len;i++) {dp[i][0]=0;dp[0][i]=0;}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(boy[i-1]==girl[j-1]) {dp[i][j]=dp[i-1][j-1]+1;flag[i][j]=-1;}
else {dp[i][j]=maxx(dp[i-1][j],dp[i][j-1]);}
}
/*for(i=0;i<=n;i++)
{
for(j=0;j<m;j++)
{
printf("%d(%d) ",dp[i][j],flag[i][j]);
}
printf("\n");
} */
return dp[n][m];
}
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int n,m,i,j,count;
while(scanf("%d %d",&n,&m),n+m)
{
for(i=0;i<n;i++) scanf("%d",&boy[i]);
for(i=0;i<m;i++) scanf("%d",&girl[i]);
qsort(boy,n,sizeof(int),cmp);
qsort(girl,m,sizeof(int),cmp);
count=LCS(n,m);
if(count > n/2) printf("美丽的女孩,你不适合种田,你适合做ACM!\n");
else if(count==0) printf("有没有女孩子愿意跟我一起回家种田~~\n");
else
{
printf("就是你了,陪我回家种田去吧!\n%d\n",count);
for(i=1;i<n;i++)
for(j=1;j<m;j++)
if(flag[i][j]==-1)
{
printf("%d\n",boy[i-1]);
break;
}
}
}
return 0;
}