#include<iostream> #include<cstdlib> #include "cielib.h" using namespace std; #define MAX 507 int iHateUOne(int pozycja[], int k, int d) { int res =0; pozycja[k] = pozycja[k] + 1; if(k < d-1) res = iHateUOne(pozycja, k+1, d); else res = czyCieplo(pozycja); if(res == 0) { pozycja[k] = pozycja[k] - 1; if(k < d-1) res = iHateUOne(pozycja, k+1, d); else res = czyCieplo(pozycja); } return res; } int main() { //ios_base::sync_with_stdio(0); int d = podajD(); int k = podajK(); int r = podajR(); int pozycja[MAX]; int A[ MAX ]; int P[MAX]; int Q[MAX]; for(int i=0; i<d; i++) { pozycja[i] = 0; A[i] = 0; P[i] = 0; Q[i] = r; } //find possible move int dimensions = d; int a = 0; bool kp = false; while( dimensions > 0 ) { //cout<<a<<" "<<P[a]<<" "<<Q[a]<<" "<<pozycja[a]<<" "<<D<<endl; if( A[a] == 0 ) { int res = czyCieplo(pozycja); // ustaw sie pozycja[a] = Q[a]; res = czyCieplo(pozycja); if(res == 1) { P[a] = ( P[a] + Q[a] )/2 + 1; } else { pozycja[a] = ( P[a] + Q[a] )/2; res = czyCieplo(pozycja); if( res == 1) { Q[a] = ( P[a] + Q[a] )/2; } } pozycja[a] = P[a]; res = czyCieplo(pozycja); if(P[a]==Q[a]) { A[a] = 1; dimensions--; //cout<<"! "<<a<<endl; } if(Q[a]-P[a] == 1) { A[a] = 2; kp = true; dimensions--; } } a++; if(a >= d) a%=d; } if(kp) { //cout<<":/"; iHateUOne(pozycja, 0, d); for(int i=0; i<d; i++) cout<<pozycja[i]<<endl; } if(!kp) for(int i=0; i<d; i++) cout<<P[i]<<endl; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include<iostream> #include<cstdlib> #include "cielib.h" using namespace std; #define MAX 507 int iHateUOne(int pozycja[], int k, int d) { int res =0; pozycja[k] = pozycja[k] + 1; if(k < d-1) res = iHateUOne(pozycja, k+1, d); else res = czyCieplo(pozycja); if(res == 0) { pozycja[k] = pozycja[k] - 1; if(k < d-1) res = iHateUOne(pozycja, k+1, d); else res = czyCieplo(pozycja); } return res; } int main() { //ios_base::sync_with_stdio(0); int d = podajD(); int k = podajK(); int r = podajR(); int pozycja[MAX]; int A[ MAX ]; int P[MAX]; int Q[MAX]; for(int i=0; i<d; i++) { pozycja[i] = 0; A[i] = 0; P[i] = 0; Q[i] = r; } //find possible move int dimensions = d; int a = 0; bool kp = false; while( dimensions > 0 ) { //cout<<a<<" "<<P[a]<<" "<<Q[a]<<" "<<pozycja[a]<<" "<<D<<endl; if( A[a] == 0 ) { int res = czyCieplo(pozycja); // ustaw sie pozycja[a] = Q[a]; res = czyCieplo(pozycja); if(res == 1) { P[a] = ( P[a] + Q[a] )/2 + 1; } else { pozycja[a] = ( P[a] + Q[a] )/2; res = czyCieplo(pozycja); if( res == 1) { Q[a] = ( P[a] + Q[a] )/2; } } pozycja[a] = P[a]; res = czyCieplo(pozycja); if(P[a]==Q[a]) { A[a] = 1; dimensions--; //cout<<"! "<<a<<endl; } if(Q[a]-P[a] == 1) { A[a] = 2; kp = true; dimensions--; } } a++; if(a >= d) a%=d; } if(kp) { //cout<<":/"; iHateUOne(pozycja, 0, d); for(int i=0; i<d; i++) cout<<pozycja[i]<<endl; } if(!kp) for(int i=0; i<d; i++) cout<<P[i]<<endl; return 0; } |