A:点击打开链接
概率题, 果断打破了我只靠记忆化搜索的思想;
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
double dp[205], t[205];
int n, m, l, r, step;
void init(){
memset(dp, 0, sizeof(dp));
memset(t, 0, sizeof(t));
dp[1]=1;
}
int main(){
while(scanf("%d%d%d%d",&n,&m,&l,&r) &&(n+m+l+r > 0)){
if(n==0 && m==0 &&l==0 && r==0) return 0;
init();
for(int i=1; i<=m; i++){
scanf("%d",&step);
step%=n;
memset(t, 0, sizeof(t));
for(int j=1; j<=n; j++){
if(j-step<1) t[j]+=dp[j-step+n]*0.5;
else t[j]+=dp[j-step]*0.5;
if(j+step>n) t[j]+=dp[j+step-n]*0.5;
else t[j]+=dp[j+step]*0.5;
}
for(int j=1; j<=n; j++){
dp[j]=t[j];
}
//for(int i=)
}
double ans=0;
for(int i=l; i<=r; i++){
ans+=dp[i];
}
printf("%.4lf\n",ans);
}
return 0;
}
I:
点击打开链接
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
char island[50][50];
int main(){
int m, n, minn, x1, x2, y1, y2;
while(cin >> m >> n && m && n){
getchar();
minn=100;
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
cin >> island[i][j];
}
getchar();
}
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(island[i][j]=='H'){
for(int k=0; k<m; k++){
for(int h=0; h<n; h++){
if(island[k][h]=='C' && abs(i-k)+abs(j-h)<minn){
minn=abs(i-k)+abs(j-h);
x1=i;
y1=j;
x2=k;
y2=h;
}
}
}
}
}
}
cout << x1 << " " << y1 << " " << x2 << " " << y2 <<endl;
}
return 0;
}
J:<a target=_blank href="http://acm.hust.edu.cn/vjudge/contest/view.action?cid=86226#problem/J">点击打开链接</a>
<pre name="code" class="cpp">
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<vector>
#include<set>
#include<cmath>
using namespace std;
struct monks
{
int k, g;
monks(int k = 0, int g = 0) : k(k), g(g){}
bool operator < (const monks q) const
{
return g < q.g;
}
};
set<monks> :: iterator it;
set<monks> res;
int main()
{
int n;
while(cin >> n &&n)
{
n+=1;
res.clear();
res.insert(monks(1, 1e9));
for(int i = 2; i <= n; ++i)
{
int k, g;
cin >> k >> g;
int tmp = k;
res.insert(monks(k, g));
it = res.find(monks(k,g));
if(it == res.begin()){ ++it; printf("%d %d\n",tmp , (*it).k);}
else
{
--it;
set<monks> :: iterator it1 = it;
++it;
++it;
set<monks> :: iterator it2 = it;
if((abs((*it1).g-g)) > (abs((*it2).g-g))) printf("%d %d\n", tmp, (*it2).k);
else printf("%d %d\n", tmp, (*it1).k);
}
}
}
return 0;
}