mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
Add 5 answers.
This commit is contained in:
parent
84069ef85f
commit
1bf5e2bfbd
134
POJ/2431.cpp
Normal file
134
POJ/2431.cpp
Normal file
|
@ -0,0 +1,134 @@
|
|||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <vector>
|
||||
#include <queue>
|
||||
#include <map>
|
||||
#include <algorithm>
|
||||
using namespace std;
|
||||
|
||||
#define MAX_N 10000
|
||||
|
||||
int L,P,N;
|
||||
|
||||
pair<int,int> 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<int> bus;
|
||||
|
||||
int ans=0,pos=0,tank=P;
|
||||
|
||||
for(int i=0;i<N;i++)
|
||||
{
|
||||
int d=A[i]-pos;
|
||||
|
||||
while(tank-d<0)
|
||||
{
|
||||
if(bus.empty())
|
||||
{
|
||||
printf("-1\n");
|
||||
return;
|
||||
}
|
||||
|
||||
tank+=bus.top();
|
||||
bus.pop();
|
||||
|
||||
++ans;
|
||||
}
|
||||
|
||||
tank-=d;
|
||||
pos=A[i];
|
||||
bus.push(B[i]);
|
||||
}
|
||||
|
||||
printf("%d\n",ans);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
scanf("%d",&N);
|
||||
for(int i=0;i<N;i++)
|
||||
{
|
||||
scanf("%d %d",&A[i],&B[i]);
|
||||
}
|
||||
scanf("%d %d",&L,&P);
|
||||
|
||||
for(int i=0;i<N;i++)
|
||||
{
|
||||
A[i]=L-A[i];
|
||||
}
|
||||
|
||||
sort(X,X+N);
|
||||
|
||||
solve();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
int main()
|
||||
{
|
||||
int n;
|
||||
scanf("%d",&n);
|
||||
vector< pair<int,int> > vec;
|
||||
for(int i=0;i<n;i++)
|
||||
{
|
||||
int a,b;
|
||||
scanf("%d %d",&a,&b);
|
||||
vec.push_back(make_pair(a,b));
|
||||
}
|
||||
int L,P;
|
||||
scanf("%d %d",&L,&P);
|
||||
priority_queue<int> bus;
|
||||
int cnt=0;
|
||||
int now=0;
|
||||
int fuel=P;
|
||||
for(int i=0;i<n;i++)
|
||||
{
|
||||
int nextLength=L-vec[i].first-now;
|
||||
while(fuel-nextLength<0)
|
||||
{
|
||||
if(bus.empty())
|
||||
{
|
||||
/// Can not reach
|
||||
printf("-1\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
fuel+=bus.top();
|
||||
bus.pop();
|
||||
++cnt;
|
||||
}
|
||||
|
||||
fuel=fuel-nextLength;
|
||||
now=L-vec[i].first;
|
||||
bus.push(vec[i].second);
|
||||
}
|
||||
|
||||
printf("%d\n",cnt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//*/
|
37
UVA/100.cpp
Normal file
37
UVA/100.cpp
Normal file
|
@ -0,0 +1,37 @@
|
|||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <algorithm>
|
||||
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;
|
||||
}
|
90
UVA/10033.cpp
Normal file
90
UVA/10033.cpp
Normal file
|
@ -0,0 +1,90 @@
|
|||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
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;
|
||||
}
|
56
UVA/10137.cpp
Normal file
56
UVA/10137.cpp
Normal file
|
@ -0,0 +1,56 @@
|
|||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <algorithm>
|
||||
using namespace std;
|
||||
|
||||
double v[1010];
|
||||
|
||||
int main()
|
||||
{
|
||||
int n;
|
||||
while(scanf("%d",&n)==1&&n)
|
||||
{
|
||||
double sum=0;
|
||||
for(int i=0;i<n;i++)
|
||||
{
|
||||
scanf("%lf",&v[i]);
|
||||
sum+=v[i];
|
||||
}
|
||||
double ave=sum/n;
|
||||
|
||||
/// Why?
|
||||
int c=ave*100;
|
||||
double ave_x=c/100+c%100*0.01;
|
||||
|
||||
double ave_f;
|
||||
if(ave==ave_x)
|
||||
{
|
||||
ave_f=ave_x;
|
||||
}
|
||||
else
|
||||
{
|
||||
ave_f=ave_x+0.01;
|
||||
}
|
||||
|
||||
double totalA=0;
|
||||
double totalB=0;
|
||||
for(int i=0;i<n;i++)
|
||||
{
|
||||
if(v[i]<=ave)
|
||||
{
|
||||
totalA+=ave_x-v[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
totalB+=v[i]-ave_f;
|
||||
}
|
||||
}
|
||||
|
||||
double total=max(totalA,totalB);
|
||||
|
||||
printf("$%.2f\n",total);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
64
UVA/10189.cpp
Normal file
64
UVA/10189.cpp
Normal file
|
@ -0,0 +1,64 @@
|
|||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <algorithm>
|
||||
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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user