回复 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; }