USACO Chapter 2 Section 2.1
准备期末考试 停了一个月……现在开始继续刷
1 /* 2 ID:xiekeyi1 3 PROG:castle 4 LANG:C++ 5 */ 6 #include<bits/stdc++.h> 7 using namespace std ; 8 const int maxn = 55; 9 10 int graph[maxn][maxn][5]; 11 int roomsize[maxn*maxn] ; 12 int vis[maxn][maxn]; 13 int m , n , color , maxsize ; 14 int dx[] = { 1 , 0 , -1 , 0 } ; 15 int dy[] = { 0 , 1 , 0 , -1 }; 16 int nowsize ; 17 int ans_row , ans_col ; 18 char dir ; 19 void scan() 20 { 21 cin >> m >> n ; 22 for( int i = 1 ; i <= n ; i++) 23 for( int j = 1 ; j <= m ; j++) 24 { 25 int t ; 26 cin >> t ; 27 for( int k = 3 ; k >= 0 ; k--) 28 graph[i][j][k] = t % 2 , t = t >> 1 ; 29 } 30 } 31 32 void floodfill( int x , int y ) 33 { 34 vis[x][y] = true ; 35 roomsize[color]++; 36 graph[x][y][4] = color ; 37 for( int i = 0 ; i < 4 ; i++) 38 { 39 int nx = x + dx[i] ; 40 int ny = y + dy[i]; 41 if( nx < 1 || ny < 1 || nx > n || ny > m ) continue ; 42 if( vis[nx][ny] || graph[x][y][i] ) continue ; 43 floodfill(nx,ny); 44 } 45 } 46 47 void merge( int x , int y ) 48 { 49 int sum = 0 ; 50 if( x >= 2 && graph[x-1][y][4] != graph[x][y][4] ) 51 { 52 sum = roomsize[ graph[x-1][y][4] ] + roomsize[ graph[x][y][4] ] ; 53 if( sum > maxsize) 54 maxsize=sum,ans_row=x,ans_col=y,dir='N' ; 55 } 56 if( y < m && graph[x][y+1][4] != graph[x][y][4] ) 57 { 58 sum = roomsize[ graph[x][y+1][4] ] + roomsize[ graph[x][y][4] ] ; 59 if( sum > maxsize ) 60 maxsize = sum , ans_row = x , ans_col = y , dir = 'E' ; 61 } 62 } 63 64 int main() 65 { 66 freopen("castle.in","r",stdin); 67 freopen("castle.out","w",stdout); 68 scan(); 69 for( int i = 1 ; i <= n ; i++) 70 for( int j = 1 ; j <= m ; j++) 71 { 72 if( !vis[i][j] ) 73 { 74 roomsize[ color ] = 0 ; 75 floodfill( i , j ); 76 color++; 77 } 78 } 79 for( int i = 0 ; i < color ; i++) 80 nowsize = max( nowsize , roomsize[ i ] ) ; 81 for( int i = 1 ; i <= m ; i++) 82 for( int j = n ; j >= 1 ; j--) 83 merge(j,i); 84 85 cout << color << endl << nowsize << endl << maxsize << endl 86 << ans_row << ' ' << ans_col << ' ' << dir << endl ; 87 return 0 ; 88 }
1 /* 2 ID:xiekeyi1 3 PROG:frac1 4 LANG:C++ 5 */ 6 7 #include<bits/stdc++.h> 8 using namespace std ; 9 const int maxn = 170 ; 10 struct node 11 { 12 int fenzi , fenmu ; 13 long double value ; 14 }x[maxn*maxn]; 15 16 bool operator < ( struct node a , struct node b ) 17 { 18 return a.value < b.value ; 19 } 20 21 int gcd( int a , int b ) 22 { 23 if( b == 0 ) 24 return a ; 25 if( a == 0 ) 26 return b ; 27 else 28 return gcd( b , a % b ) ; 29 } 30 31 int main() 32 { 33 freopen("frac1.in","r",stdin); 34 freopen("frac1.out","w",stdout); 35 int n ; 36 cin >> n ; 37 int cnt = 0 ; 38 for( int i = 0 ; i <= n ; i++) 39 for( int j = 1 ; j <= n ; j++) 40 if( gcd( i , j ) == 1 && ( (i+0.0) / j ) <= 1 ) 41 x[cnt].fenzi = i , x[cnt].fenmu = j , x[cnt].value = (x[cnt].fenzi + 0.0) / x[cnt].fenmu , cnt++; 42 43 sort(x,x+cnt); 44 for( int i = 0 ; i < cnt ; i++) 45 printf("%d/%d\n",x[i].fenzi,x[i].fenmu); 46 return 0 ; 47 } 48 49
1 /* 2 ID:xiekeyi1 3 PROG:sort3 4 LANG:C++ 5 */ 6 #include<bits/stdc++.h> 7 using namespace std ; 8 const int maxn = 1010 ; 9 int a[maxn] , b[maxn]; 10 int c[5][5] ; 11 12 int main() 13 { 14 freopen("sort3.in","r",stdin); 15 freopen("sort3.out","w",stdout); 16 int n ; 17 cin >> n ; 18 for( int i = 1 ; i <= n ; i++) 19 { 20 cin >> a[i] ; 21 b[i] = a[i] ; 22 } 23 24 sort( b+1 , b+1+n ) ; 25 26 for( int i = 1 ; i <= n ; i++) 27 if( a[i] != b[i] ) 28 c[ b[i] ][ a[i] ]++; 29 30 int ans = 0 ; 31 for( int i = 1 ; i <= 3 ; i++) 32 { 33 for( int j = 1 ; j <= 3 ;j++) 34 { 35 if( c[i][j] && c[j][i] ) 36 { 37 int t = min( c[i][j] , c[j][i] ); 38 c[i][j] -= t , c[j][i] -=t , ans+=t ; 39 } 40 } 41 } 42 43 ans+= c[1][2] * 2 ; 44 ans+= c[1][3] * 2 ; 45 cout << ans << endl ; 46 return 0 ; 47 }
1 /* 2 ID:xiekeyi1 3 PROG:holstein 4 LANG:C++ 5 */ 6 #include<bits/stdc++.h> 7 using namespace std ; 8 const int maxn = 30 ; 9 int v , vv[maxn] , g , gg[maxn][maxn]; 10 11 void init() 12 { 13 cin >> v ; 14 for( int i = 1 ; i <= v ; i++) 15 cin >> vv[i]; 16 cin >> g ; 17 for( int i = 1 ; i <= g ; i++) 18 for( int j = 1 ; j <= v ; j++) 19 cin >> gg[i][j]; 20 } 21 22 bool flag = false ; 23 int num[maxn]; 24 int cnt = 0 ; 25 int k = 1 ; 26 void work() 27 { 28 int a[30] = {0}; 29 for( int i = 1 ; i <= cnt ; i++) 30 for( int j = 1 ; j <= v ; j++) 31 a[j] += gg[ num[i] ][j] ; 32 for( int i = 1 ; i <= v ; i++) 33 if( a[i] < vv[i] ) 34 return ; 35 36 flag = true ; 37 cout << cnt ; 38 for( int i = 1 ; i <= cnt ; i++) 39 cout << ' ' << num[i] ; 40 cout << endl ; 41 } 42 43 void dfs( int t ) 44 { 45 if( flag || t > g ) return ; 46 if( cnt >= k ) 47 { 48 work() ; 49 return ; 50 } 51 52 cnt++; 53 num[cnt] = t + 1 ; 54 dfs( t + 1 ) ; 55 cnt--; 56 dfs( t + 1 ) ; 57 return ; 58 } 59 60 61 int main() 62 { 63 freopen("holstein.in","r",stdin); 64 freopen("holstein.out","w",stdout); 65 init() ; 66 while( !flag ) 67 { 68 dfs(0); 69 k++; 70 } 71 return 0 ; 72 }
1 /* 2 ID:xiekeyi1 3 PROG:hamming 4 LANG:C++ 5 */ 6 #include<bits/stdc++.h> 7 using namespace std ; 8 9 bool judge( int b , int n , int d , int aj) 10 { 11 bitset<8> judge( n ^ aj ) ; 12 int t1 = 0 , t2 = 0 ; 13 for( int i = 0 ; i < b ; i++) 14 if( judge.test( i ) ) 15 t1++; 16 if( t1 < d ) 17 return false ; 18 // judge.flip(); 19 // for( int i = 0 ; i < b ; i++) 20 // if( judge.test( i ) ) 21 // t2++; 22 // if( t1 < d && t2 < d ) 23 // return false ; 24 return true ; 25 26 // int t1 = judge.count(); 27 // judge.flip(); 28 // int t2 = judge.count(); 29 // if( t1 != d && t2 != d ) 30 // return false ; 31 // return true ; 32 } 33 34 35 int main() 36 { 37 freopen("hamming.in","r",stdin); 38 freopen("hamming.out","w",stdout); 39 int n , b , d ; 40 cin >> n >> b >> d ; 41 int cnt = 0 ; 42 vector<int> a; 43 a.push_back(0); 44 int i = 0 ; 45 while( a.size() != n) 46 { 47 for( ; i <= 300; ) 48 { 49 i++; 50 //cout << "Debug: " << i << endl ; 51 bool flag = true ; 52 for( int j = 0 ; j < a.size() ; j++) 53 { 54 //bitset<8> judge( i ^ a[j] ) ; 55 if( !judge( b, i , d , a[j] ) ) 56 { 57 flag = false ; 58 break ; 59 } 60 } 61 if( flag ) 62 { 63 a.push_back(i) ; 64 //cout << "Debug:" << i << endl ; 65 break ; 66 } 67 68 } 69 } 70 int tcnt = 0 ; 71 for( int i = 0 ; i < a.size() ; i++) 72 { 73 ++tcnt; 74 if( tcnt == 1 ) 75 cout << a[i] ; 76 else if( tcnt != 10 ) 77 cout << ' ' << a[i] ; 78 else if( tcnt == 10 ) 79 { 80 tcnt = 0 ; 81 cout << ' ' << a[i] << endl ; 82 } 83 } 84 if( tcnt != 0 ) 85 cout << endl ; 86 return 0 ; 87 }
浙公网安备 33010602011771号