【备战蓝桥杯】USACo-- airpro【改变策略】
編碼到現(xiàn)在,我明白了一點(diǎn)。我之所以如此安排自己coding, 說實(shí)話就是為了嘗試恢復(fù)到自己去年上半年時(shí)的狀態(tài)。
但是我發(fā)現(xiàn)了,越是想恢復(fù)原來那個(gè)所謂的巔峰狀態(tài),就越發(fā)現(xiàn)還差了點(diǎn)東西沒有,要么是思想,要么是處理問題的思路,或者平時(shí)的行為習(xí)慣。
于是我就越想彌補(bǔ),越發(fā)現(xiàn)自己不如以前。
其實(shí)不然,我現(xiàn)在與以前的狀態(tài)已經(jīng)完全不同,我周圍的環(huán)境,身邊的人也已經(jīng)完全不同,不能再完全按照原來的路子來。
總之,就是得更新策略。得向前看,縱向比較,我是進(jìn)步了的。整體都在進(jìn)步,綜合都在進(jìn)步。
某一方面特別強(qiáng)勢,而其他方面的缺失,是不能說明強(qiáng)大的。正如木桶理論的最短板理論。
因此,我只需向前奔跑,不管我以前什么狀態(tài),什么思想,什么行為習(xí)慣。just do it!
我只管提升現(xiàn)在的知識基礎(chǔ)、感情基礎(chǔ)、環(huán)境基礎(chǔ)的我的能力就好,并通過熟練,加以融合。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面是我的另外一道題,只完成到一半。目前覺得沒有很大必要寫下去,留待以后吧。
學(xué)會的新的思路:
1、將雙平方數(shù),另外coding打表出來;
2、放到測試的程序中作為初始的data使用;
3、接下來就是邏輯安排與分析了。
下面的是auxiliary.c ?文件
#include <stdio.h> #include <stdlib.h> #define INFINITE 1000void gene(int *in) {int p,q; // FILE *out; // out = fopen("square.txt","w");int i=0;for(p=0 ; p <= 250 ;p++){for(q=0 ; q <= 250 ; q++){//printf("%d,",p*p+q*q);in[i++] = p*p+q*q;}}printf("%d",i); }void quick(int *in,int l ,int r) {if( l < r ){int i= l ,j =r, x= in[l];while(i < j)//內(nèi)部判斷的都是i和j {while( i < j && in[j] >= x )j--;if(i < j )in[i++] = in[j];while(i < j && in[i] < x)//注意這個(gè)等號可以不要 i++;if(i < j)in[j--] = in[i];}in[i] = x;quick(in,l ,i-1);//注意這里的分界點(diǎn)是i,不是r,下面也是 quick(in, i+1 ,r);} }/* void quick(int *node,int l,int r) { if (l < r) { //Swap(s[l], s[(l + r) / 2]); //將中間的這個(gè)數(shù)和第一個(gè)數(shù)交換 參見注1 int i = l, j = r,x = node[l];while (i < j) { while(i < j && node[j] >= x) // 從右向左找第一個(gè)小于x的數(shù) j--; if(i < j) node[i++] = node[j]; while(i < j && node[i] < x) // 從左向右找第一個(gè)大于等于x的數(shù) i++; if(i < j) node[j--] = node[i]; } node[i] = x; quick(node, l, i - 1); // 遞歸調(diào)用 quick(node, i + 1, r); } } */void merge(int *a,int start,int mid,int end) { int i,j,k; //申請輔助數(shù)組 int *array1=(int *)malloc(sizeof(int)*(mid-start+2)); int *array2=(int *)malloc(sizeof(int)*(end-mid+1)); //把a(bǔ)從mid分開分別賦值給數(shù)組 for(i=0;i<mid-start+1;i++) *(array1+i)=a[start+i]; *(array1+i)=INFINITE;//作為哨兵 for(i=0;i<end-mid;i++) *(array2+i)=a[i+mid+1]; *(array2+i)=INFINITE; //有序的歸并到數(shù)組a中 i=j=0; for(k=start;k<=end;k++){ if(*(array1+i) > *(array2+j)){ a[k]=*(array2+j); j++; } else{ a[k]=*(array1+i); i++; } } free(array1); free(array2); } //歸并排序 void mergeSort(int *a,int start,int end) { int mid=(start+end)/2; if(start<end){ //分解 mergeSort(a,start,mid); mergeSort(a,mid+1,end); //合并 merge(a,start,mid,end); } } int clear(int *in,int *out) {int i,j=0;for(i=0 ; i < 251*251-1; i++){if(in[i+1] !=in[i]){out[j++] = in[i];}}out[j++] = in[i];return j; } void print(int *out,int len) {FILE *fout;fout = fopen("squ.txt","w");int i;for(i=0 ; i< len ; i++){fprintf(fout,"%d,",out[i]);}fclose(fout); }int main() {int square[251*251];int out[251*251];int len;gene(square);printf("gene is all done!");//mergeSort(square,0,251*251-1); quick(square,0,251*251-1);printf("quick is all done!");len = clear(square,out);printf("clear is all done!");print(out,len);printf("this is all done!\n--%d",251*251-1);return 0; }下面是部分測試coding。arc.c /* 1 5 9 13 17 【我的思路】 1、預(yù)先用程序打出一張雙平方數(shù)表, 最大250平方 + 250平方 2、利用折半查找搜索題目要求的數(shù)據(jù)范圍。 (或者就一直取數(shù)判斷,當(dāng)取到的數(shù)大于限制的時(shí)候就停止) 3、從數(shù)組的步長開始逐個(gè)嘗試,是否符合方差長度的組合。 1 2 4 5 8 4、排序結(jié)果,輸出。 */ #include <stdio.h> int squ[21047]={0,1,2,……};//太多了。省略。網(wǎng)頁已經(jīng)無法保存 int mark(int max) {int i;for(i=0 ; i< 21047 ; i++){if( squ[i]==max*max*2)return i;}/*int max2 = max*max*2;int beg=0,end = 21046;int mid = (beg+end)/2;while( squ[mid]!= max2 ){if( max2 < squ[mid]){end = mid;}else{beg = mid;}}return mid;*/ }int main() {int len,max;scanf("%d",&len);scanf("%d",&max);//獲取最大值的數(shù)組下標(biāo) int poi = mark(max);int i,step=1;int count,dis,beg;//方差從1開始, 一個(gè)一個(gè)實(shí)驗(yàn),尋找 大于等于該方差的 下標(biāo)//1、如果找到了本串, (待優(yōu)化,繼續(xù)判斷的增加),則從本串開始的下一個(gè)下標(biāo)開始;//2、沒找全,也繼續(xù) 同上//方差直到 小于 max*max//下標(biāo)直到 小于poifor( dis=1 ; dis < max*max ; dis++){beg=0;count=1;for( i=1; beg+i < poi ; i++){for( ; squ[beg+i]-squ[beg+i-1]<dis && beg+i < poi; i++);if( squ[beg+i]-squ[beg+i-1]==dis){count++;}else{ count=1;beg++;i=0;}if( count==len){printf("%d %d\n",squ[beg],dis);count=1;beg++;i=0;}}} return 0; }
總結(jié)
以上是生活随笔為你收集整理的【备战蓝桥杯】USACo-- airpro【改变策略】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 16秋南开计算机应用答案,南开16秋学期
- 下一篇: android键盘还是讯飞输入,讯飞输入