diff options
author | Iru Cai <mytbk920423@gmail.com> | 2018-04-16 19:06:32 +0800 |
---|---|---|
committer | Iru Cai <mytbk920423@gmail.com> | 2018-04-16 19:06:32 +0800 |
commit | ad4e2420e822b8a115aac6124307b89447578782 (patch) | |
tree | 6f4db875081597e2e64dd4221a97bbff25503dcc /1.3 | |
parent | a7721767628a51b752ad3a96eb334734241dcd8b (diff) | |
download | usaco-ad4e2420e822b8a115aac6124307b89447578782.tar.xz |
1.2~1.5
Diffstat (limited to '1.3')
-rw-r--r-- | 1.3/dualpal.c | 50 | ||||
-rw-r--r-- | 1.3/milk2.c | 58 | ||||
-rw-r--r-- | 1.3/namenum.c | 58 | ||||
-rw-r--r-- | 1.3/palsquare.c | 56 | ||||
-rw-r--r-- | 1.3/transform.c | 109 |
5 files changed, 331 insertions, 0 deletions
diff --git a/1.3/dualpal.c b/1.3/dualpal.c new file mode 100644 index 0000000..caa516e --- /dev/null +++ b/1.3/dualpal.c @@ -0,0 +1,50 @@ +/* +ID: mytbk921 +LANG: C +TASK: dualpal +*/ + +#include <stdio.h> + +int dualpal(int a) //check if a is dualpal +{ + int chk[32]; + int l,base,i; + int count=0; + for (base=10;base>=2;base--){ + l=0; + for (chk[0]=a;chk[l];++l){ + chk[l+1]=chk[l]/base; //when chk[l+1]=0,the conversion is over + chk[l]%=base; + } + for (i=0;i<l/2;i++){ + if (chk[i]!=chk[l-1-i]) + break; + } + if (i>=l/2) + ++count; + if (count==2) + return 1; + } + return 0; +} + +int main() +{ + int n,s; + FILE *fin=fopen("dualpal.in","r"); + FILE *fout=fopen("dualpal.out","w"); + fscanf(fin,"%d%d",&n,&s); + fclose(fin); + + while (n){ + ++s; + if (dualpal(s)){ + fprintf(fout,"%d\n",s); + --n; + } + } + + return 0; +} + diff --git a/1.3/milk2.c b/1.3/milk2.c new file mode 100644 index 0000000..4573334 --- /dev/null +++ b/1.3/milk2.c @@ -0,0 +1,58 @@ +/* +ID: mytbk921 +LANG: C +TASK: milk2 +*/ + +#include <stdio.h> +#include <stdlib.h> +#define MAXN 5000 +#define max(a,b) ((a)>(b))?(a):(b) + +typedef struct +{ + int begin,end; +}TimeTab,*pTimeTab; + +int comp(pTimeTab a,pTimeTab b) +{ + return a->begin-b->begin; +} + +int main() +{ + int N; + int max_milk,max_nomilk; + int tBegin,tEnd; + int i; + TimeTab milktime[MAXN]; + + FILE *fin=fopen("milk2.in","r"); + FILE *fout=fopen("milk2.out","w"); + fscanf(fin,"%d",&N); + for (i=0;i<N;++i) + fscanf(fin,"%d%d",&milktime[i].begin,&milktime[i].end); + fclose(fin); //input complete + qsort(milktime,N,sizeof(TimeTab),(int(*)(const void*,const void*))comp); + + max_milk=milktime[0].end-milktime[0].begin; + max_nomilk=0; + tBegin=milktime[0].begin;tEnd=milktime[0].end; + for (i=0;i<N;i++){ + if (tEnd>=milktime[i].begin) + tEnd=max(tEnd,milktime[i].end); + else{ + max_milk=max(tEnd-tBegin,max_milk); + max_nomilk=max(milktime[i].begin-tEnd,max_nomilk); + tBegin=milktime[i].begin; + tEnd=milktime[i].end; + } + if (i==N-1) + max_milk=max(tEnd-tBegin,max_milk); + } + fprintf(fout,"%d %d\n",max_milk,max_nomilk); + fclose(fout); //output complete + return 0; +} + + diff --git a/1.3/namenum.c b/1.3/namenum.c new file mode 100644 index 0000000..dac1f44 --- /dev/null +++ b/1.3/namenum.c @@ -0,0 +1,58 @@ +/* +ID: mytbk921 +LANG: C +TASK: namenum +*/ + +#include <stdio.h> +#include <string.h> +#define MAXL 16 + +const char map[]="ABCDEFGHIJKLMNOPRSTUVWXYZ"; //use a 'Z' to map the end + +int mapped(int i,char c) //if mapped,return 0,otherwise return smaller(-1),or bigger(+1) +{ + int j; + if (i>=sizeof(map)/3) //i invalid + return 1; + for (j=i*3;j<(i+1)*3;j++){ + if (map[j]==c) //mapped + return 0; + } + if (c>=map[j]) //c is too big + return 1; + else return -1; +} + +int main() +{ + char target[MAXL],numstr[MAXL]; + FILE *fin=fopen("namenum.in","r"); + FILE *dict=fopen("dict.txt","r"); + FILE *fout=fopen("namenum.out","w"); + int has_answer=0; + fscanf(fin,"%s",numstr); + fclose(fin); + while (fscanf(dict,"%s",target)!=EOF){ + int i; + if (mapped(numstr[0]-'2',target[0])==1) //too big + break; + for (i=0;numstr[i];++i){ + if (mapped(numstr[i]-'2',target[i])!=0) + break; + } + if (numstr[i]||target[i]) //not matched + continue; + else{ + has_answer=1; + fprintf(fout,"%s\n",target); + } + } + if (!has_answer) + fprintf(fout,"NONE\n"); + + fclose(dict); + fclose(fout); + return 0; +} + diff --git a/1.3/palsquare.c b/1.3/palsquare.c new file mode 100644 index 0000000..47f7593 --- /dev/null +++ b/1.3/palsquare.c @@ -0,0 +1,56 @@ +/* +ID: mytbk921 +LANG: C +TASK: palsquare +*/ + +#include <stdio.h> + +const char numMap[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + +int convert(int x,int base,int dest[]) + //convert integer x to an array,return the length +{ + int i=0; + while (x){ + dest[i++]=x%base; + x/=base; + } + return i; +} + +int isReverse(int a[],int len) //check is an array is pan +{ + int i; + for (i=0;i<len/2;i++){ + if (a[i]!=a[len-1-i]) + return 0; + } + return 1; +} + +int main() +{ + int i,j; + int base; + int origNum[32],aNum[32],origLen,len; + FILE *fin=fopen("palsquare.in","r"); + FILE *fout=fopen("palsquare.out","w"); + fscanf(fin,"%d",&base); + fclose(fin); + for (i=1;i<=300;i++){ + len=convert(i*i,base,aNum); + if (isReverse(aNum,len)){ + origLen=convert(i,base,origNum); //used to print i + for (j=origLen-1;j>=0;j--) + fprintf(fout,"%c",numMap[origNum[j]]); + fputc(' ',fout); + for (j=len-1;j>=0;j--) //print i*i + fprintf(fout,"%c",numMap[aNum[j]]); + fputc('\n',fout); + } + } + fclose(fout); + return 0; +} + diff --git a/1.3/transform.c b/1.3/transform.c new file mode 100644 index 0000000..cb12725 --- /dev/null +++ b/1.3/transform.c @@ -0,0 +1,109 @@ +/* +ID: mytbk921 +LANG: C++ +TASK: transform +*/ + +#include <iostream> +#include <fstream> +#define MAXN 10 + +using namespace std; + +typedef struct +{ + int n; + char pattern[MAXN][MAXN]; +}Tile,*pTile; + +void Rotate(pTile src,pTile dest) +{ + //to rotate 90 degrees + //(i,j) -> (j,n-1-i) + int tmp[MAXN][MAXN]; + int n=src->n; + for (int i=0;i<n;i++){ + for (int j=0;j<n;j++){ + tmp[j][n-1-i]=src->pattern[i][j]; + } + } + for (int i=0;i<n;i++){ + for (int j=0;j<n;j++) + dest->pattern[i][j]=tmp[i][j]; + } +} + +void reflect(pTile src,pTile dest) +{ + int tmp[MAXN][MAXN]; + int n=src->n; + for (int i=0;i<n;i++){ + for (int j=0;j<n;j++) + tmp[i][n-1-j]=src->pattern[i][j]; + } + for (int i=0;i<n;i++){ + for (int j=0;j<n;j++) + dest->pattern[i][j]=tmp[i][j]; + } +} + +int isequal(pTile a,pTile b) +{ + if (a->n != b->n) + return 0; + int n=a->n; + for (int i=0;i<n;i++) + for (int j=0;j<n;j++) + if (a->pattern[i][j]!=b->pattern[i][j]) + return 0; + return 1; +} + +int main() +{ + int n; + Tile a[2]; + ifstream fin("transform.in"); + fin >> n; + for (int i=0;i<2;i++){ + for (int j=0;j<n;j++) + for (int k=0;k<n;k++) + fin >> a[i].pattern[j][k]; + a[i].n=n; + } + fin.close(); //input complete + + ofstream fout("transform.out"); + for (int i=1;i<=3;i++){ + Rotate(a+0,a+0); + if (isequal(a,a+1)){ + fout << i << endl; + return 0; + } + } + Rotate(a+0,a+0); //recover a + reflect(a+0,a+0); + if (isequal(a+0,a+1)){ + fout << 4 << endl; + return 0; + } + for (int i=0;i<3;i++){ + Rotate(a+0,a+0); + if (isequal(a+0,a+1)){ + fout << 5 << endl; + return 0; + } + } + Rotate(a+0,a+0); + reflect(a+0,a+0); + if (isequal(a+0,a+1)){ + fout << 6 << endl; + return 0; + } + else{ + fout << 7 << endl; + return 0; + } + fout.close(); +} + |