diff --git a/POJ/2431.cpp b/POJ/2431.cpp new file mode 100644 index 0000000..d227d33 --- /dev/null +++ b/POJ/2431.cpp @@ -0,0 +1,134 @@ +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +#define MAX_N 10000 + +int L,P,N; + +pair X[MAX_N+1]; + +struct _A +{ +public: + int& operator [] (int x) + { + return X[x].first; + } +}A; + +struct B +{ +public: + int& operator [] (int x) + { + return X[x].second; + } +}B; + +void solve() +{ + A[N]=L; + B[N]=0; + N++; + + priority_queue bus; + + int ans=0,pos=0,tank=P; + + for(int i=0;i > vec; + for(int i=0;i bus; + int cnt=0; + int now=0; + int fuel=P; + for(int i=0;i +#include +#include +#include +using namespace std; + +int main() +{ + int l,r; + while(scanf("%d %d",&l,&r)==2) + { + /// Naive! What assume l < r? + int ll=min(l,r); + int rr=max(l,r); + + /// F^K. Why the problem does not show the REAL range? + int maxcnt=-1; + + for(int i=ll;i<=rr;i++) + { + long long c=i; + int cnt=1; + while(c!=1) + { + if(c&1) c=c*3+1; + else c=c/2; + + ++cnt; + } + + maxcnt=max(maxcnt,cnt); + } + + printf("%d %d %d\n",l,r,maxcnt); + } + return 0; +} diff --git a/UVA/10033.cpp b/UVA/10033.cpp new file mode 100644 index 0000000..534202e --- /dev/null +++ b/UVA/10033.cpp @@ -0,0 +1,90 @@ +#include +#include +#include +#include +#include +using namespace std; + +int reg[10]; + +int mem[1000]; + +int main() +{ + int t; + scanf("%d%*c%*c",&t); + + while(t--) + { + memset(reg,0,sizeof(reg)); + memset(mem,0,sizeof(mem)); + + /// Read code + int cc=0; + while(1) + { + string buff; + if(!getline(cin,buff)) break; + + if(buff.size()>1) + { + sscanf(buff.c_str(),"%d",&mem[cc]); + ++cc; + } + else break; + } + + /// Execute Code + int cnt=0; + int pc=0; + while(1) + { + int opt=mem[pc]; + ++cnt; + ++pc; + if(opt==100) + { + break; + } + + int d=(opt%100)/10; + int n=opt%10; + + switch(opt/100) + { + case 0: + if(reg[n]) pc=reg[d]; + break; + case 2: + reg[d]=n; + break; + case 3: + reg[d]=(reg[d]+n)%1000; + break; + case 4: + reg[d]=(reg[d]*n)%1000; + break; + case 5: + reg[d]=reg[n]; + break; + case 6: + reg[d]=(reg[d]+reg[n])%1000; + break; + case 7: + reg[d]=(reg[d]*reg[n])%1000; + break; + case 8: + reg[d]=mem[reg[n]]; + break; + case 9: + mem[reg[n]]=reg[d]; + break; + } + } + + printf("%d\n",cnt); + if(t) printf("\n"); + } + + return 0; +} diff --git a/UVA/10137.cpp b/UVA/10137.cpp new file mode 100644 index 0000000..cf7f48e --- /dev/null +++ b/UVA/10137.cpp @@ -0,0 +1,56 @@ +#include +#include +#include +#include +using namespace std; + +double v[1010]; + +int main() +{ + int n; + while(scanf("%d",&n)==1&&n) + { + double sum=0; + for(int i=0;i +#include +#include +#include +using namespace std; + +char buff[110][110]; +int mp[110][110]; + +int main() +{ + int cc=1; + + int n,m; + while(scanf("%d %d%*c",&n,&m)==2&&n&&m) + { + if(cc!=1) printf("\n"); + + printf("Field #%d:\n",cc++); + memset(mp,0,sizeof(mp)); + + for(int i=1;i<=n;i++) + { + scanf("%s",&buff[i][1]); + } + + for(int i=1;i<=n;i++) + { + for(int j=1;j<=m;j++) + { + if(buff[i][j]=='*') + { + mp[i][j]=-999; + ++mp[i-1][j-1]; + ++mp[i-1][j]; + ++mp[i-1][j+1]; + ++mp[i][j-1]; + ++mp[i][j+1]; + ++mp[i+1][j-1]; + ++mp[i+1][j]; + ++mp[i+1][j+1]; + } + } + } + + for(int i=1;i<=n;i++) + { + for(int j=1;j<=m;j++) + { + if(mp[i][j]<0) + { + printf("*"); + } + else + { + printf("%d",mp[i][j]); + } + } + printf("\n"); + } + } + + return 0; +}