USACO training训练题解【1】
2016-12-15 12:34
513 查看
第一章完结
Greedy Gift Givers
Friday the Thirteenth
Broken Necklace
Milking Cows
/*
ID: tominute
PROG: milk2
LANG: C++
*/
#include
#include
#include
using namespace std;
int time1[1000000]={0};
int main() {
ofstream fout ("milk2.out");
FILE *fp;
fp=fopen("milk2.in","r");
int n,k,i,milk=0,nomilk=1,max=0,min=
4000
10000;
int max_milk=0,max_nomilk=0;
fscanf(fp,"%d",&n);
int start[5000],end[5000];
for(i=0;imax)max=end[i];
if(start[i]
Transformations
/*
ID: tominute
PROG: transform
LANG: C++
*/
#include
#include
#include
#include
using namespace std;
void ro90(char raw[50][50],int n){
char temp[50][50];
for(int i=0;i
Name That Number
Palindromic Squares
Dual Palindromes
Mixing Milk
Barn Repair
Prime Cryptarithm
Combination Lock
/*
ID: tominute
PROG: combo
LANG: C++
*/
#include
#include
#include
using namespace std;
int main() {
FILE *fp,*fout;
int i=0,n,count=0,secret1[3],secret2[3],j,flag,up;
int sec1[3][5],sec2[3][5],out[300][3]={0},index[3]={0},temp[3];
fp=fopen("combo.in","r");
fout=fopen("combo.out","w");
fscanf(fp,"%d",&n);
fscanf(fp,"%d %d %d",&secret1 [0],&secret1 [1],&secret1 [2]);
fscanf(fp,"%d %d %d",&secret2 [0],&secret2 [1],&secret2 [2]);
fclose(fp);
if(n<=5)up=n;
else up=5;
for(i=0;i<3;i++){
for(j=0;j=0){
for(j=0;j<3;j++){
out[count][j]=sec1[j][index[j]];
}
count++;
for(i=2;i>=0;i--){
++index[i];
if(index[i]==up)
index[i]=0;
else break;
}
}
i=0;
while(i>=0){
for(j=0;j<3;j++){
temp[j]=sec2[j][index[j]];
}
for(j=0;j=0;i--){
++index[i];
if(index[i]==up)
index[i]=0;
else break;
}
}
fprintf(fout,"%d\n",count);
fclose(fout);
return 0;
}
Wormholes
/*
ID: tominute
PROG: wormhole
LANG: C++
*/
#include
#include
#include
using namespace std;
long all[11000][24]={0},pos[12][2]={0};
int total,flag=0,flag2=0,coun=0;
int getnum(int n){
n--;
if(n<=0)return 1;
else return getnum(n-1)*n;
}
void getpair1(long pos[12][2],int n,long all[][24],int row=0,int tot=0){
int k=tot/(n-1),j;
long temp[12][2];
for(int i=0;i=1)&&(flag<2)){
getpair1(pos,n-2,all,row,k);
}
for(int m=0;m<12;m++){
pos[m][0]=temp[m][0];
pos[m][1]=temp[m][1];
}
flag=0;
coun--;
row=row+k;
}
}
int retest(int nn,int n,long x,long y,long tempx,long tempy){
long tpx=1999999999,tpy=0;
int i=0,flag=0,j=0,flag2=0,jj=0;
for(j=0;jall[nn][2*j]){tpx=all[nn][2*j];tpy=all[nn][2*j+1];jj=j;}
flag2=1;
}
}
if(flag2==1){tempx=tpx;tempy=tpy;}
if(flag2==0)return 0;
flag2=0;
if(jj%2==0)flag=1;
else flag=-1;
tempx=all[nn][2*(jj+flag)];
tempy=all[nn][2*(jj+flag)+1];
if((tempx==x)&&(tempy==y))return 1;
else return retest(nn,n,x,y,tempx,tempy);
}
int main() {
FILE *fp,*fout;
int i=0,n,sum=0,flag=0;
long pair[6][4];
fp=fopen("wormhole.in","r");
fout=fopen("wormhole.out","w");
fscanf(fp,"%d",&n);
for(i=0;i
Ski Course Design
/*
ID: tominute
PROG: skidesign
LANG: C++
*/
#include
#include
#include
using namespace std;
int main(void)
{
int N,i,temp,diff,flag,sum=0;
long out=999999999;
int height[1000]={0};
ifstream fin("skidesign.in");
fin >> N;
for(i=0;i>height[i];
fin.close();
for(i=1;i<=83;i++){
sum=0;
for(int j=0;j(i+17))sum+=(height[j]-i-17)*(height[j]-i-17);
}
if(sum
Arithmetic Progressions
/*
ID: tominute
PROG: ariprog
LANG: C++
*/
#include
#include
#include
#include
using namespace std;
int square(int test,int M){
int i,j,upp=sqrt(test),diff,iii,difff;
if(M=iii;i--){
diff=test-i*i;
if(diff==0)return 1;
difff=sqrt(diff);
if(difff*difff==diff)return 1;
}
return 0;
}
int main(void)
{
int N,i,M,a,b,test,sum=0,m,flag=0,k,n,aa;
ifstream fin("ariprog.in");
fin >> N>>M;
m=M;
M=2*M*M;
k=M/(N-1);
fin.close();
ofstream fout("ariprog.out");
if(((m+N)<20)||(N<15)){
for(b=1;b<=k;b++){
aa=M-(N-1)*b;
for(a=0;a<=aa;a++){
for(i=0;i
Mother's Milk
Number Triangles
Prime Palindromes
Superprime Rib
Greedy Gift Givers
/* ID: tominute PROG: gift1 LANG: C++ */ #include #include #include using namespace std; int main() { ofstream fout ("gift1.out"); FILE *fp; fp=fopen("gift1.in","r"); int n,a,b; fscanf(fp,"%d",&n); char name[10][20]; char buf[10][20]; char kk[20]; int gift[10][2]; int money[10]={0}; for(int i=0;i
Friday the Thirteenth
/* ID: tominute PROG: friday LANG: C++ */ #include #include #include using namespace std; int main() { ofstream fout ("friday.out"); FILE *fp; fp=fopen("friday.in","r"); int n,j,k,i,day=3; fscanf(fp,"%d",&n); fclose(fp); int month[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int week[7]={0}; for(i=0;i
Broken Necklace
/* ID: tominute PROG: beads LANG: C++ */ #include #include #include using namespace std; int main() { ofstream fout ("beads.out"); FILE *fp; fp=fopen("beads.in","r"); int n,k,i; int r_max=0,l_max=0,rmax=0,lmax=0,sum=0; char beads[360],bead[360]; fscanf(fp,"%d",&n); fscanf(fp,"%s",beads); fclose(fp); for(i=0;i=rmax)rmax=r_max; r_max=0; strcpy(bead,beads); k=i-1; if(k==-1)k=n-1; switch(bead){ case 'b': if(bead[k]=='w')bead[k]='r'; while(bead[k]=='r'){ k--;l_max++; if(k==-1)k=n-1; if(bead[k]=='w')bead[k]='r'; }break; case 'r': if(bead[k]=='w')bead[k]='b'; while(bead[k]=='b'){ k--;l_max++; if(k==-1)k=n-1; if(bead[k]=='w')bead[k]='b'; }break; default :break; } lmax=l_max; l_max=0; if((lmax+rmax)>=sum)sum=lmax+rmax; if(sum>n)sum=n; lmax=0;rmax=0; } if(sum==0)sum=n; fout<
Milking Cows
/*
ID: tominute
PROG: milk2
LANG: C++
*/
#include
#include
#include
using namespace std;
int time1[1000000]={0};
int main() {
ofstream fout ("milk2.out");
FILE *fp;
fp=fopen("milk2.in","r");
int n,k,i,milk=0,nomilk=1,max=0,min=
4000
10000;
int max_milk=0,max_nomilk=0;
fscanf(fp,"%d",&n);
int start[5000],end[5000];
for(i=0;imax)max=end[i];
if(start[i]
Transformations
/*
ID: tominute
PROG: transform
LANG: C++
*/
#include
#include
#include
#include
using namespace std;
void ro90(char raw[50][50],int n){
char temp[50][50];
for(int i=0;i
Name That Number
/* ID: tominute PROG: namenum LANG: C++ */ #include #include #include using namespace std; int main() { FILE *fp,*dict,*fout; int i,n,k=0,state=0; char t[20],d[20]; int num[20]; int para[20]={0}; char test[20]={'\0'}; char phone[8][4]={"ABC","DEF","GHI","JKL","MNO","PRS","TUV","XYZ"}; fp=fopen("namenum.in","r"); fout=fopen("namenum.out","w"); fscanf(fp,"%s",t); fclose(fp); n=strlen(t) ; for(i=0;i=0){ for(i=0;i=0;k--){ para[k]++; if(para[k]==3){ para[k]=0; } else break; } } k=0; } if(state==0) fprintf(fout,"NONE\n"); fclose(fout); //cout<
Palindromic Squares
/* ID: tominute PROG: palsquare LANG: C++ */ #include #include #include using namespace std; int coun=0; void conv(int base,int num,char out[20]){ char outnum[20]; int yu; if(num==0){ coun=1; out[0]=0; } else{ for(int i=0;num!=0;i++){ yu=num%base; num=num/base; if(yu<10) outnum[i]=yu+48; else outnum[i]=yu+55; coun++; } for(int i=0;i
Dual Palindromes
/* ID: tominute PROG: dualpal LANG: C++ */ #include #include #include using namespace std; int coun=0; void conv(int base,int num,char out[33]){ char outnum[33]; int yu; if(num==0){ coun=1; out[0]=0; } else{ for(int i=0;num!=0;i++){ yu=num%base; num=num/base; if(yu<10) outnum[i]=yu+48; else outnum[i]=yu+55; coun++; } for(int i=0;i=2){ geshu++; fprintf(fout,"%d\n",i); } k=0; } fclose(fout); getchar(); return 0; }
Mixing Milk
/* ID: tominute PROG: milk LANG: C++ */ #include #include #include using namespace std; long int farmer[5000][2]; int main() { FILE *fp,*fout; int i=0,j,m; long int n,temp,count=0,total=0; fp=fopen("milk.in","r"); fout=fopen("milk.out","w"); fscanf(fp,"%d %d",&n,&m); for(i=0;in){ farmer[i][1]=n-count+farmer[i][1]; break; } } for(j=0;j<=i;j++){ total=total+farmer[j][0]*farmer[j][1]; } //cout<
Barn Repair
/* ID: tominute PROG: barn1 LANG: C++ */ #include #include #include using namespace std; void test(int *flag,int p,int q,int *START,int *END){ int start,end,len=0; for(int j=p;j<=q;j++){ if(flag[j-1]==1){ start=j; j++; while((flag[j-1]==0)&&(j<=q)){ j++; } end=j; j=start; if(len<=end-start-1){ *END=end; *START=start; len=end-start-1; } } } } int main() { FILE *fp,*fout; int i=0,j,m,s,c,total=0,END,START,count=0,temp; int stall[200],mem[50][2]; int flag1[200]={0}; int outflag[200]={1}; fp=fopen("barn1.in","r"); fout=fopen("barn1.out","w"); fscanf(fp,"%d %d %d",&m,&s,&c); for(i=0;istall[j]){ temp=stall[i]; stall[i]=stall[j]; stall[j]=temp; } } } for(i=0;i
Prime Cryptarithm
/* ID: tominute PROG: crypt1 LANG: C++ */ #include #include #include using namespace std; int prime[10]; int test(int *test,int digit,int num){//1 false;0 ture int flag=0; for(int k=0;k=0){ for(j=0;j<3;j++){ mul[j]=prime[index[j]]; } if(mul[2]!=0){ for(j=0;j=1)continue;//test the leading digit flag=test(temp1,n,3); if(flag>=1)continue;//test the first partial mul //cout<=1||(prime[k]==0)))continue;//test the leading digit flag=test(temp2,n,3); if(flag>=1)continue;//test the second partial mul out[0]=temp1[0]; out[1]=(temp1[1]+temp2[0])%10; flag=(temp1[1]+temp2[0])/10; out[2]=(temp1[2]+temp2[1]+flag)%10; flag=(temp1[2]+temp2[1]+flag)/10; out[3]=(temp2[2]+flag)%10; flag=(temp2[2]+flag)/10; if(flag>=1)continue;//test the leading digit flag=test(out,n,4); if(flag>=1)continue;//test final mul count++; } } } for(i=2;i>=0;i--){ index[i]++; if(index[i]==n){ index[i]=0; } else break; } } fprintf(fout,"%d\n",count); //cout<
Combination Lock
/*
ID: tominute
PROG: combo
LANG: C++
*/
#include
#include
#include
using namespace std;
int main() {
FILE *fp,*fout;
int i=0,n,count=0,secret1[3],secret2[3],j,flag,up;
int sec1[3][5],sec2[3][5],out[300][3]={0},index[3]={0},temp[3];
fp=fopen("combo.in","r");
fout=fopen("combo.out","w");
fscanf(fp,"%d",&n);
fscanf(fp,"%d %d %d",&secret1 [0],&secret1 [1],&secret1 [2]);
fscanf(fp,"%d %d %d",&secret2 [0],&secret2 [1],&secret2 [2]);
fclose(fp);
if(n<=5)up=n;
else up=5;
for(i=0;i<3;i++){
for(j=0;j=0){
for(j=0;j<3;j++){
out[count][j]=sec1[j][index[j]];
}
count++;
for(i=2;i>=0;i--){
++index[i];
if(index[i]==up)
index[i]=0;
else break;
}
}
i=0;
while(i>=0){
for(j=0;j<3;j++){
temp[j]=sec2[j][index[j]];
}
for(j=0;j=0;i--){
++index[i];
if(index[i]==up)
index[i]=0;
else break;
}
}
fprintf(fout,"%d\n",count);
fclose(fout);
return 0;
}
Wormholes
/*
ID: tominute
PROG: wormhole
LANG: C++
*/
#include
#include
#include
using namespace std;
long all[11000][24]={0},pos[12][2]={0};
int total,flag=0,flag2=0,coun=0;
int getnum(int n){
n--;
if(n<=0)return 1;
else return getnum(n-1)*n;
}
void getpair1(long pos[12][2],int n,long all[][24],int row=0,int tot=0){
int k=tot/(n-1),j;
long temp[12][2];
for(int i=0;i=1)&&(flag<2)){
getpair1(pos,n-2,all,row,k);
}
for(int m=0;m<12;m++){
pos[m][0]=temp[m][0];
pos[m][1]=temp[m][1];
}
flag=0;
coun--;
row=row+k;
}
}
int retest(int nn,int n,long x,long y,long tempx,long tempy){
long tpx=1999999999,tpy=0;
int i=0,flag=0,j=0,flag2=0,jj=0;
for(j=0;jall[nn][2*j]){tpx=all[nn][2*j];tpy=all[nn][2*j+1];jj=j;}
flag2=1;
}
}
if(flag2==1){tempx=tpx;tempy=tpy;}
if(flag2==0)return 0;
flag2=0;
if(jj%2==0)flag=1;
else flag=-1;
tempx=all[nn][2*(jj+flag)];
tempy=all[nn][2*(jj+flag)+1];
if((tempx==x)&&(tempy==y))return 1;
else return retest(nn,n,x,y,tempx,tempy);
}
int main() {
FILE *fp,*fout;
int i=0,n,sum=0,flag=0;
long pair[6][4];
fp=fopen("wormhole.in","r");
fout=fopen("wormhole.out","w");
fscanf(fp,"%d",&n);
for(i=0;i
Ski Course Design
/*
ID: tominute
PROG: skidesign
LANG: C++
*/
#include
#include
#include
using namespace std;
int main(void)
{
int N,i,temp,diff,flag,sum=0;
long out=999999999;
int height[1000]={0};
ifstream fin("skidesign.in");
fin >> N;
for(i=0;i>height[i];
fin.close();
for(i=1;i<=83;i++){
sum=0;
for(int j=0;j(i+17))sum+=(height[j]-i-17)*(height[j]-i-17);
}
if(sum
Arithmetic Progressions
/*
ID: tominute
PROG: ariprog
LANG: C++
*/
#include
#include
#include
#include
using namespace std;
int square(int test,int M){
int i,j,upp=sqrt(test),diff,iii,difff;
if(M=iii;i--){
diff=test-i*i;
if(diff==0)return 1;
difff=sqrt(diff);
if(difff*difff==diff)return 1;
}
return 0;
}
int main(void)
{
int N,i,M,a,b,test,sum=0,m,flag=0,k,n,aa;
ifstream fin("ariprog.in");
fin >> N>>M;
m=M;
M=2*M*M;
k=M/(N-1);
fin.close();
ofstream fout("ariprog.out");
if(((m+N)<20)||(N<15)){
for(b=1;b<=k;b++){
aa=M-(N-1)*b;
for(a=0;a<=aa;a++){
for(i=0;i
Mother's Milk
/* ID: tominute PROG: milk3 LANG: C++ */ #include #include #include #include #include using namespace std; int main(void) { int a,b,c,left[21]={0},a1,b1,c1,flag,count=0,out[21]={0},r; ifstream fin("milk3.in"); FILE *fout; fout=fopen("milk3.out","w"); fin >>a>>b>>c; fin.close(); c1=c;a1=0;b1=0;left[c1]=1; for(int i=0;i<5000000;i++){ r=rand()%6; switch(r){ case 0:if(c1>(a-a1)){c1=c1-(a-a1);a1=a;}//c->a else{a1+=c1;c1=0;} if(a1==0)left[c1]=1; if(a1>(b-b1)){a1=a1-(b-b1);b1=b;}//a->b else{b1+=a1;a1=0;}break; case 1:if(c1>(b-b1)){c1=c1-(b-b1);b1=b;}//c->b else{b1+=c1;c1=0;} if(a1==0)left[c1]=1; if(b1>(a-a1)){b1=b1-(a-a1);a1=a;}//b->a else{a1+=b1;b1=0;}break; case 2: if(a1>(c-c1)){a1=a1-(c-c1);a1=a;}//a->c else{c1+=a1;a1=0;} if(a1==0)left[c1]=1;break; case 3:if(b1>(c-c1)){b1=b1-(c-c1);b1=b;}//b->c else{c1+=b1;b1=0;} if(a1==0)left[c1]=1;break; case 4: if(a1>(b-b1)){a1=a1-(b-b1);b1=b;}//a->b else{b1+=a1;a1=0;}break; case 5:if(b1>(a-a1)){b1=b1-(a-a1);a1=a;}//b->a else{a1+=b1;b1=0;}break; } } for(int i=0;i<21;i++){ if(left[i]==1){out[count]=i;count++;} } for(int i=0;i<(count-1);i++){ fprintf(fout,"%d ",out[i]); } fprintf(fout,"%d\n",out[count-1]); fclose(fout); //cout<<"end"<
Number Triangles
/* ID: tominute PROG: numtri LANG: C++ */ #include #include #include #include #include using namespace std; long temp[1010]={0}; long numtri[1010][1010]={0}; int main(void) { int n,i,k=1; ifstream fin("numtri.in"); FILE *fout; fin >>n; for(i=1;i<=n;i++){ for(int j=1;j<=i;j++){ fin>>numtri[i][j]; } } fin.close(); /*for(i=1;i<=n;i++){ for(int j=0;j[i]=0;j--){ if(temp[j]>=temp[j-1])temp[j]+=numtri[i][j]; else temp[j]=temp[j-1]+numtri[i][j]; } } for(i=1;i<=n;i++){ if(temp[i]>temp[0])temp[0]=temp[i]; } fout=fopen("numtri.out","w"); fprintf(fout,"%ld\n",temp[0]); fclose(fout); //getchar(); return 0; }
Prime Palindromes
/* ID: tominute PROG: pprime LANG: C++ */ #include #include #include #include using namespace std; int num(long a){ int count=0; while(a>=1){ a=a/10; count++; } return count; } int zhishu(long test){ //long k=test/2; long kk=sqrt(test); for(long i=3;i<=kk;i+=2) if(test%i==0)return 1; return 0; } int main(void) { int na,nb,i,k=0,index[2][10],ind[8]={5,10,10,10,10,10,10,10},dex[8]={0}; long test,a,b; for(i=0;i<=9;i++) index[1][i]=i; for(i=0;i<=4;i++) index[0][i]=2*i+1; ifstream fin("pprime.in"); FILE *fout; fin >>a>>b; fin.close(); na=num(a); nb=num(b); fout=fopen("pprime.out","w"); for(i=na;i<=nb;i++){ for(int j=0;j<8;j++)dex[j]=0;k=0; while(k>=0){ if(i%2==0){ test=index[0][dex[0]]; for(int j=2;j<=i/2;j++) test+=pow(10,j-1)*index[1][dex[j-1]]; for(int j=i/2+1;j<=i-1;j++) test+=pow(10,j-1)*index[1][dex[i-j]]; test+=pow(10,i-1)*index[0][dex[0]]; } if(i%2==1){ test=index[0][dex[0]]; if(i>=5){for(int j=2;j<=i/2;j++) test+=pow(10,j-1)*index[1][dex[j-1]];} if(i!=1)test+=pow(10,i/2)*index[1][dex[i/2]]; if(i>=5){for(int j=i/2+2;j<=i-1;j++) test+=pow(10,j-1)*index[1][dex[i-j]];} if(i!=1)test+=pow(10,i-1)*index[0][dex[0]]; } if(zhishu(test)==0){ if(i==na){if((test>=a)&&(test<=b))fprintf(fout,"%ld\n",test);} if((i==nb)&&(na!=nb)){if(test<=b)fprintf(fout,"%ld\n",test);} if((i!=na)&&(i!=nb))fprintf(fout,"%ld\n",test); } for(k=(i+1)/2-1;k>=0;k--){ dex[k]++; if(dex[k]==ind[k])dex[k]=0; else break; } } } //cout<
Superprime Rib
/* ID: tominute PROG: sprime LANG: C++ */ #include #include #include #include using namespace std; int zhishu(long test){ //long k=test/2; long kk=sqrt(test); for(long i=3;i<=kk;i+=2) if(test%i==0)return 1; return 0; } int main(void) { int n,i,num1[4]={2,3,5,7},num2[5]={1,3,5,7,9},k=0,index[8]={0},index_max[8]={4,5,5,5,5,5,5,5},flag; long test; ifstream fin("sprime.in"); FILE *fout; fin >>n; fin.close(); fout=fopen("sprime.out","w"); while(k>=0){ test=num1[index[0]]; flag=0; for(i=1;i=0;k--){ index[k]++; if(index[k]==index_max[k])index[k]=0; else break; } } fclose(fout); //getchar(); return 0; }
相关文章推荐
- usaco training 6.1.2 A Rectangular Barn 题解
- usaco training-Subset Sums
- [USACO Training] Section 2.1
- USACO Training Section 1.2 Greedy Gift Givers
- 【模拟递规】Mother's Milk 母亲的牛奶 (Usaco_Training 1.4)
- USACOTraining 3.1.5 Contact 联系 题解
- USACO TRAINING 1.4.2 Packing Rectangles(状态压缩+枚举)
- usaco training 5.3.1 Milk Measuring 题解
- 【USACO TRAINING】数字金字塔(DP)
- [USACO Training] Section 2.4
- 【模拟枚举】Arithmetic Progressions等差数列(Usaco_Training 1.4)
- USACO Training 3.3.3 Camelot 亚瑟王的宫殿 题解与分析
- usaco training 5.3.3 Network of Schools 题解
- 【USACO Training】Section 2.1 Ordered Fractions
- USACO Training切题纪念
- 【多文件操作】【检索】Name That Number (Usaco_Training 1.2)
- 【最长回文字串】Calf Flac 最长的回文 (Usaco_Training 1.3)
- 【宽搜】The Clocks 时钟 (Usaco_Training 1.4)
- (1070): 【USACO TRAINING】香甜的黄油
- USACO Training刷题记录 By cellur925