Hdu 4802:
#include<stdio.h>
#include<string.h>
#include<string>
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
map<string,double>m;
double s,sum1,sum2;
string op;
int n;
int main()
{
m["A"]=4.0,m["A-"]=3.7,m["B+"]=3.3,m["B"]=3.0;
m["B-"]=2.7,m["C+"]=2.3,m["C"]=2.0,m["C-"]=1.7;
m["D"]=1.3,m["D-"]=1.0,m["F"]=0;
while(cin>>n)
{
sum1=0,sum2=0;
for(int i=0;i<n;i++)
{
cin>>s>>op;
if(op=="P"||op=="N")
continue;
sum2+=s;
sum1+=s*m[op];
}
if(sum2==0)
printf("0.00\n");
else
printf("%.2lf\n",sum1/sum2);
}
}
Hdu 4811: YY出来的.....因为在修改的过程中scanf里面多了一个"%",贡献了几次WA....冲动是魔鬼....
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
long long a[3];
int main()
{
while(~scanf("%I64d%I64d%I64d",&a[0],&a[1],&a[2]))
{
long long n=a[0]+a[1]+a[2];
// printf("%I64d %I64d %I64d\n",a[0],a[1],a[2]);
sort(a,a+3);
if(a[2]==0)
printf("0\n");
else if(a[1]==0)
{
if(a[2]==1)
printf("0\n");
else
printf("%I64d\n",1+(n-2)*2);
}
else if(a[0]==0)
{
if(a[1]==1)
{
if(a[2]==1)
printf("1\n");
else
printf("%I64d\n",1+2+(n-3)*3);
}
else
printf("%I64d\n",1+2+3+(n-4)*4);
}
else
{
if(a[0]>=2)
{
printf("%I64d\n",15+(n-6)*6);
}
else if(a[0]==1)
{
if(a[1]==1)
{
if(a[2]==1)
{
printf("%I64d\n",1*1LL+2);
}
else
{
printf("%I64d\n",1+2+3+(a[2]-2)*4);
}
}
else
{
printf("%I64d\n",1+2+3+4+(n-5)*5);
}
}
}
}
return 0;
}
Hdu 4810:
对于样例,我们把它变成2进制:
0 0 0 1
0 0 1 0
1 0 1 0
0 0 0 1
统计每一位1的个数,对于二进制的每一位,我们选出k个数,如果里面有奇数个1,那么说明异或后,结果不是0,反之.....
交了后WA了,但觉得想法没问题,就改一点交一点,WA了好多次.......因为忘记了C[i][j]当j>i时,是0,其实根本就不应该跑到这一步的,,,,,,,
#include<stdio.h>
#include<string.h>
#include<map>
#include<algorithm>
using namespace std;
#define mod 1000003
int n;
int a[1001];
long long ans[1001];
int sum;
long long c[1001][1001];
int num[33];
inline void init()
{
memset(c,0,sizeof(c));
c[0][0]=1;
for(int i=1;i<=1000;i++) c[i][0]=1,c[i][i]=1;
for(int i=2;i<=1000;i++)
for(int j=1;j<i;j++)
c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
}
inline void chuli(int t)
{
int val=t;
int s=1;
while(val)
{
if(val%2)
num[s]++;
val/=2;
s++;
}
}
int main()
{
init();
while(~scanf("%d",&n))
{
memset(ans,0,sizeof(ans));
memset(num,0,sizeof(num));
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
chuli(a[i]);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=32;j++)
{
for(int k=1;k<=i;k+=2)
ans[i]+=(c[num[j]][k]*(c[n-num[j]][i-k])%mod)*((1*1LL)<<(j-1) %mod),ans[i]%=mod;
}
}
for(int i=1;i<=n;i++)
{
printf("%I64d",ans[i]%mod);
if(i==n)
printf("\n");
else
printf(" ");
}
}
}
#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
int x,y;
int main()
{
while(~scanf("%d%d",&x,&y))
{
if(y<x) printf("-1\n");
else if(x==1) printf("%d\n",y-1);
else
{
if(x==2)
printf("%d\n",(y+1)/2);
else if(x==3)
{
int a[3]={2,3,4};
printf("%d\n",(y-3)/3+a[(y-3)%3]);
}
else if(x==4)
{
int a[4]={3,4,4,5};
printf("%d\n",(y-4)/4+a[(y-4)%4]);
}
else if(x==5)
{
int a[5]={4,5,5,6,6};
printf("%d\n",(y-5)/5+a[(y-5)%5]);
}
else if(x==6)
{
int a[]={5,6,6,6,7,7};
printf("%d\n",(y-6)/6+a[(y-6)%6]);
}
else if(x==7)
{
int a[7]={6,7,7,7,8,8,9};
printf("%d\n",(y-7)/7+a[(y-7)%7]);
}
else if(x==8)
{
int a[8]={7,8,8,9,8,9,9,10};
printf("%d\n",(y-8)/8+a[(y-8)%8]);
}
else if(x==9)
{
int a[9]={8,9,9,9,9,10,10,10,11};
printf("%d\n",(y-9)/9+a[(y-9)%9]);
}
else if(x==10)
{
int a[10]={9,10,10,10,11,10,11,11,11,12};
printf("%d\n",(y-10)/10+a[(y-10)%10]);
}
}
}
}
额,打表代码:
#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
struct node
{
int x,y;
double a,b;
int t;
};
bool operator < (node i,node j)
{
return i.t>j.t;
}
int x,y;
int main()
{
int ans[100][100];
memset(ans,-1,sizeof(ans));
for(int i=2;i<=10;i++)
for(int j=i;j<=50;j++)
{
priority_queue<node>q;
node v,vv,vvv;
v.x=v.y=1;
v.a=v.b=1.0;
v.t=0;
q.push(v);
int flag=-1;
while(!q.empty())
{
v=q.top();
q.pop();
if(v.x==i&&v.y==j)
{
flag=v.t;break;
}
if(v.x>i||v.y>j)
continue;
vv.b=(v.a+1)*(v.b/v.a);
vv.a=v.a+1;
vv.x=v.x+1;
vv.y=int(vv.b+(1e-8));
vv.t=v.t+1;
//printf("%d %d %d %.2lf %.2lf\n",vv.x,vv.y,vv.t,vv.a,vv.b);
if(vv.x==i&&vv.y==j)
{
flag=vv.t;break;
}
if(vv.x<=i&&vv.y<=j)
q.push(vv);
vvv.b=v.b+1.0;
vvv.a=v.a;
vvv.x=v.x;
vvv.y=int(vvv.b+(1e-8));
vvv.t=v.t+1;
//printf("%d %d %d %.2lf %.2lf\n",vvv.x,vvv.y,vvv.t,vvv.a,vvv.b);
if(vvv.x==i&&vvv.y==j)
{
flag=vvv.t;break;
}
if(vvv.x<=i&&vvv.y<=j)
q.push(vvv);
}
ans[i][j]=flag;
}
for(int i=2;i<=10;i++)
{
for(int j=i;j<=50;j++)
printf("%d ",ans[i][j]);
printf("\n\n");
}
}