|
從組隊做題開始到今天的題目做起來感覺比以往順手多了~ 有些自己寫的小技巧能夠實現了,進步是有的,呵呵。 昨晚說要組隊做個T-SHIRT的樣子,呵呵,這方面實在不擅長,沒什么想法。。。 現在我是餓著肚子敲這些字的,中午一起來就12點了,汗,現在餓的根本做不進去題目,幸好已經做了2個題了,今天算是沒不完成任務。 深度優先搜索的基本框架和出入還原已經基本掌握, folyd算法的模板能夠理解。 高精度計算的書寫也已經較為熟練。 處理技巧的應用有所提高。
但是 英文水平實在。。。導致讀題理解題意又耗費時間又沒有效果,煩了還就干脆不讀了。。。 對比較復雜的邏輯判斷和字符串處理的題目做起來較慢,耗時間耗精力。 大部分算法沒有研究過,遇到問題就是暴力+小優化的想法。 準備假期回家就是刷水題刷水題。。。
準備下學期好好學一下數據結構,掌握了之后去了解算法,寫代碼熟練程度也是很重要的,現在就應該處于水的階段。 生活方面白天睡覺晚上閑著,實在是。。。更重要的是不吃飯下午可怎么做題啊。。。
說說這個題目,大家一般都將這個問題抽象成了數學問題來解決,但是我的解法是最直接的枚舉,觀察題意可知,對每一組數據應該有兩種 天平的出解情況,a*x==b*y+d和a*x+d==b*y 對每一種情況按照人放東西的方法來枚舉,如果天平的一邊重了,就在另一邊放上那個a或者b 最后比較兩組解哪個更滿足題目的答案并輸出即可。 附上AC代碼
1 Problem: 2142 User: hongtaozhy 2 Memory: 288K Time: 0MS 3 Language: G++ Result: Accepted 4 5 Source Code 6 #include<stdio.h> 7 int x,y; 8 void meiju(int a , int b , int d ) { 9 10 x=0;y=0; 11 while(1) { 12 if(a*x<b*y+d) { 13 if (y==0&&(d-a*x)%b==0) { 14 y=(d-a*x)/b; 15 break; 16 } 17 x++; 18 continue ; 19 } 20 if(a*x==b*y+d) { 21 break; 22 } 23 else 24 y++; 25 } 26 } 27 28 int main() { 29 30 int a , b , d; 31 int xx,yy; 32 while(scanf("%d%d%d",&a,&b,&d)&&a&&b&&d) { 33 meiju(a,b,d); 34 xx=x;yy=y; 35 // printf("1:%d %d\n",x,y); 36 meiju(b,a,d); 37 // printf("2:%d %d\n",y,x); 38 if(x+y<xx+yy) 39 printf("%d %d\n",y,x); 40 else 41 if((x+y==xx+yy)&&a*x+b*y<a*xx+b*yy) 42 printf("%d %d\n",y,x); 43 else 44 printf("%d %d\n",xx,yy); 45 } 46 47 48 return 0; 49 } 50 51 52
摘要: 這個題目A的很傻,一次接入三個字符,然后自己不停的來處理各種情況的效果,呵呵,各種格式是應該注意的,空格算是小陷阱?呵呵,所以一般復制那個sample再改就好了,freopen("a.in","r",stdin);freopen("a.out","w",stdout);這種文件讀入讀出的方式對觀察自己的輸出結果很有好處,推薦使用防止PE,呵呵,也許是北大的數據比較弱,這個同樣的題目在天大的OJ就過... 閱讀全文
呵呵,這個題目做出來時候很開心,因為用到了一個小技巧,就是標記格子時候用2進制的變化規則來存儲,這樣絕不會出現重復,而這個數字最大是2^50,所以要用GCC/G++的long long型C/C++的__int64來存儲。呵呵,這樣做就只需要判格子即可不需要判邊,最后一個DFS查數量就AC了,但是這是數據量范圍決定的,>64的就沒法這樣做了~注意輸入數字的大小順序和自己的程序不符的時候要判斷并互換才可以。 附上AC代碼,呵呵,blog建立到現在有好幾十的閱讀量了,很高興。我在ACM上還是個最菜的級別~希望能通過這個Blog堅持下去,并與大家交流得以提高&&認識些朋友~呵呵,希望大家留個言哈``
1 #include<stdio.h> 2 #include<string.h> 3 long long cake[20][20]; 4 int used[20][20]; 5 long long now; 6 int w,h; 7 long long po(int a , int b ) { 8 long long temp; 9 temp = 1 ; 10 for(int i = 0 ; i < b ; i++) { 11 temp = 2*temp; 12 } 13 return temp; 14 } 15 16 void dfs(int j , int i ) { 17 if(i<0||j<0||i>=w||j>=h) return; 18 if(used[j][i]!=0) return; 19 if(cake[j][i]!=now) return; 20 used[j][i]=1; 21 dfs(j+1,i); 22 dfs(j-1,i); 23 dfs(j,i+1); 24 dfs(j,i-1); 25 } 26 27 int main() { 28 int count; 29 int t; 30 long long im; 31 int n; 32 int x1,x2,y1,y2; 33 while(scanf("%d%d",&w,&h)&&w&&h) { 34 scanf("%d",&n); 35 memset(cake,-1,sizeof(cake)); 36 memset(used,-1,sizeof(used)); 37 count=0; 38 for(int i = 0 ; i < w ; i++ ) 39 for(int j = 0 ; j < h ; j++ ) 40 { cake[j][i] = 0 ; 41 used[j][i] = 0 ; 42 } 43 for(int i = 0 ; i < n ; i++ ) { 44 scanf("%d%d%d%d",&x1,&y1,&x2,&y2); 45 46 if (x1>x2) {t=x1;x1=x2;x2=t;} 47 if (y1>y2) {t=y1;y1=y2;y2=t;} 48 49 for( int j = x1 ; j < x2 ; j++ ) { 50 for ( int k = y1 ; k < y2 ; k++ ) { 51 cake[j][k] += po(2,i); 52 } 53 } 54 } 55 for(int i = 0 ; i < w ; i++ ) 56 for(int j = 0 ; j < h ; j++ ) 57 if(used[j][i]==0) { 58 now=cake[j][i]; 59 dfs(j,i); 60 count++; 61 } 62 printf("%d\n",count); 63 } 64 return 0; 65 } 66 67
摘要: http://acm.pku.edu.cn/JudgeOnline/problem?id=1001求高精度冪的題目,題目的難度在于處理如同 .00010 的輸入
和輸出的前導后導零的問題,還有小數點的位置可能在處理輸入時候被影響寫了好久代碼,但是同學用JAVA只需要一會就能搞定了,郁悶...附上AC代碼:
1Source Code 2&n... 閱讀全文
通過這兩個題目練習了代碼的熟練程度 發現了一個很好的網址: http://www.nocow.cn/index.php/USACO_Training一個OIER做的wiki 里面有USACO題目的翻譯和標程 了解到了 蔡勒公式 一個計算 星期的公式。 即隨便給一個日期,就能用這個公式推算出是星期幾。 蔡勒公式如下: W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1 詳見: http://baike.baidu.com/view/598757.htm附上兩題的代碼
1 /* 2 ID: hongtaozhy 3 LANG: C++ 4 TASK: gift1 5 */ 6 #include <stdio.h> 7 #include <string.h> 8 char name[10][15]; 9 char temp[15],temp2[15]; 10 int money[10]; 11 int rec; 12 int key; 13 int main () { 14 15 freopen ("gift1.in", "r",stdin); 16 freopen ("gift1.out", "w",stdout); 17 int n ; 18 int i ; 19 scanf("%d",&n); 20 21 for( int i = 0 ; i < n ; i++ ) 22 scanf("%s",name[i]); 23 24 while(scanf("%s",temp)!=EOF){ 25 key = 0; 26 for( int i = 0 ; i < n ; i++ ){ 27 if(!strcmp(name[i],temp)){ 28 rec = i ; 29 break; 30 } 31 } 32 int nn; 33 int mon; 34 35 36 scanf("%d%d",&mon,&nn); 37 if( nn != 0 ) 38 key = mon - ( mon / nn ) * nn ; 39 money[rec] -= mon ; 40 money[rec] += key ; 41 42 for( int i = 0 ; i < nn ; i++ ){ 43 44 scanf("%s",temp2); 45 for( int j = 0 ; j < n ; j++ ){ 46 if(!strcmp(name[j],temp2)){ 47 rec = j ; 48 break; 49 } 50 } 51 52 money[rec] += mon / (nn) ; 53 54 55 } 56 } 57 58 for(int i = 0 ; i < n ; i++ ){ 59 printf("%s %d\n",name[i],money[i]); 60 } 61 62 63 return 0; 64 } 65
1 /* 2 ID: hongtaozhy 3 LANG: C++ 4 TASK: friday 5 */ 6 #include <stdio.h> 7 int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 8 int day[7]; 9 10 int main () { 11 freopen ("friday.in", "r",stdin); 12 freopen ("friday.out", "w",stdout); 13 14 int i,j,l=6,n; 15 scanf("%d",&n); 16 n+=1900; 17 for(i=1900;i<n;i++){ 18 if((i%100!=0 && i%4==0)||i%400==0)mon[1]++; 19 for(j=0;j<12;j++){ 20 day[l]++; 21 l+=mon[j]; 22 l%=7; 23 } 24 mon[1]=28; 25 } 26 printf("%d",day[6]); 27 for(i=0;i<6;i++) 28 printf(" %d",day[i]); 29 printf("\n"); 30 31 return 0; 32 } 33
過了兩個熟悉系統的題目,這個平臺的題目對算法的理解很有幫助,而且給出測試數據可以便于找到自己的錯誤,很好~ 想想這個是為了IOI準備的題庫,也就是中學生競賽所用,感覺到了大學才開始了解程序的我們,未免有些傷懷,不過沒什么,只要努力就好,希望這個假期和以后能夠為之而奮斗,提升解題和英語能力! 2000+2000=hadn't !
1 /* 2 ID: hongtaozhy 3 LANG: C++ 4 TASK: test 5 */ 6 #include <stdio.h> 7 int main () { 8 freopen ("test.in", "r",stdin); 9 freopen ("test.out", "w",stdout); 10 int a, b; 11 scanf ("%d %d", &a, &b); /* the two input integers */ 12 printf ("%d\n", a+b); 13 return 0; 14 } 15
1 /* 2 ID: hongtaozhy 3 LANG: C++ 4 TASK: ride 5 */ 6 #include <stdio.h> 7 #include <string.h> 8 char a[7],b[7]; 9 int sum1,sum2; 10 int main () { 11 freopen ("ride.in", "r",stdin); 12 freopen ("ride.out", "w",stdout); 13 14 while(scanf("%s%s",a,b)==2){ 15 sum1=1; 16 sum2=1; 17 18 for(int i = 0 ; i< strlen(a) ; i++) 19 sum1 *= a[i] - 'A' + 1; 20 for(int i = 0 ; i< strlen(b) ; i++) 21 sum2 *= b[i] - 'A' + 1; 22 23 sum1 = sum1 % 47; 24 sum2 = sum2 % 47; 25 26 27 28 if(sum1 == sum2 ) 29 printf("GO\n"); 30 else printf("STAY\n"); 31 } 32 33 return 0; 34 } 35
|