summaryrefslogtreecommitdiff
path: root/1.3
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2018-04-16 19:06:32 +0800
committerIru Cai <mytbk920423@gmail.com>2018-04-16 19:06:32 +0800
commitad4e2420e822b8a115aac6124307b89447578782 (patch)
tree6f4db875081597e2e64dd4221a97bbff25503dcc /1.3
parenta7721767628a51b752ad3a96eb334734241dcd8b (diff)
downloadusaco-ad4e2420e822b8a115aac6124307b89447578782.tar.xz
1.2~1.5
Diffstat (limited to '1.3')
-rw-r--r--1.3/dualpal.c50
-rw-r--r--1.3/milk2.c58
-rw-r--r--1.3/namenum.c58
-rw-r--r--1.3/palsquare.c56
-rw-r--r--1.3/transform.c109
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();
+}
+