标签:
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> const int N = 1e5+5; using namespace std; long long C[N][20]; int prime[20][2]; inline int judge(int x,int m,int k) { int res = 0; while(x%m==0){ res+=k; x/=m; }return res ; } inline int work(int n,int m,int num) { memset(C,0,sizeof(C)); int ans = 0; for(int i=1;i<=n;i++) { int k=0; for(int j=0;j<num;j++){ C[i][j]=C[i-1][j]+judge(n-i+1,prime[j][0],1)+judge(i,prime[j][0],-1); if(C[i][j]>=prime[j][1])k++; } if(k==num){ C[i][num]=1; ans++; } }return ans ; } inline int init(int x){ int m = sqrt(x+0.5); int primenum = 0; for(int i=2;i<=m;i++){ while(x%i==0){ if(!primenum||prime[primenum-1][0]!=i){ prime[primenum][0]=i; prime[primenum++][1]=1; }else { prime[primenum-1][1]++; }x/=i; } }if(x!=1){ prime[primenum][0]=x; prime[primenum++][1]=1; }return primenum ; } int main() { int n,m; while(scanf("%d%d",&n,&m)==2) { int primenum=init(m); int ans = work(n-1,m,primenum); printf("%d\n",ans); if(ans==0){ printf("\n"); continue; } for(int i=0;i<n;i++){//printf("%lld ",C[i]); if(C[i][primenum]>0)printf("%d%c",i+1,(--ans)?' ':'\n'); } } return 0; }
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int N = 50000+5; int phi[N]; inline void phi_table (int n){ memset(phi,0,sizeof(phi)); phi[1]=1; for(int i=2;i<=n;i++) if(!phi[i]){ for(int j=i;j<=n;j+=i){ if(!phi[j])phi[j]=j; phi[j] = phi[j]/i*(i-1); } } } int main() { int n; while(scanf("%d",&n)==1&&n) { phi_table(n); long long ans = 1; for(int i=2;i<=n;i++) ans += phi[i]*2; printf("%lld\n",ans); } }
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; char str[105]; int main() { while(gets(str)!=NULL) { int n=strlen(str); int num1=0,num2=0; for(int i=0;i<n;i++) { if(i!=n-1&&str[i]=='0'&&str[i+1]=='1') num1++; if(i==n-1&&str[i]=='0'&&str[0]=='1') num1++; if(str[i]=='1') num2++; } int p1=num1*(n-1),p2=(n-num2)*num2; if(p1<p2) printf("SHOOT\n"); else if(p1>p2) printf("ROTATE\n"); else printf("EQUAL\n"); } return 0; }
#include<cstdio> #include<algorithm> using namespace std; int main() { int a,b,c; while(scanf("%d%d%d",&a,&b,&c)==3) { double ans=(b*b-b+a*b)/((a+b)*(a+b-c-1)); printf("%.2f\n",ans); } }
#include<cstdio> #include<vector> #include<cstring> #include<algorithm> using namespace std; double e[1100000]; int n,m; double p[25]; double ans[25]; vector<int>A[21]; inline void oper(int x){ int cur = 0,y=x; while(x){ cur += x%2; x>>=1; }A[cur].push_back(y); } inline void init() { for(int x=1;x<1100000;x++){ oper(x); } } inline double work(int x) { double res = 1; for(int i=0,tem=1;i<n;tem<<=1,i++){ if(x&tem) res*=p[i]; else res*=(1-p[i]); }for(int i=0,tem=1;i<n;tem<<=1,i++){ if(x&tem) ans[i]+=res; }return res; } int main() { int t=0;init(); while(scanf("%d%d",&n,&m)==2) { if(!n&&!m)break; memset(ans,0,sizeof(ans)); for(int i=0;i<n;i++) { scanf("%lf",&p[i]); }double sum = 0; printf("Case %d:\n",++t); if(m==0){ for(int i=0;i<n;i++) printf("0.000000\n"); continue; } for(int i=0;i<A[m].size()&&A[m][i]<(1<<n);i++) { //printf("x = %d\n",A[m][i]); sum += work(A[m][i]); } for(int i=0;i<n;i++) printf("%.6f\n",ans[i]/sum); } }
#include<cstdio> #include<cstring> #include<vector> #include<algorithm> #include<cmath> const int Max = 1953124; using namespace std; bool vis[Max+5]; char card[10][5][3]; double step[Max+5]; inline void oper(int *now,int x){ for(int i=0;i<9;i++){ now[i] = x%5; x/=5; } } inline int get_id(int *now,int a,int b){ int res = 0 ; for(int i=8;i>=0;i--) { res = res*5 + now[i]; if(i==a||i==b)res--; } return res ; } inline double dfs(int x) { //printf("x=%d\n",x); //if(x==0)system("pause"); if(vis[x])return step[x]; vis[x] = true; int now[10]; oper(now,x); int cur = 0; for(int i=0;i<9;i++) { for(int j=i+1;j<9;j++) { if( now[i] && now[j] && card[i][now[i]][0] == card[j][now[j]][0] ) { int id = get_id(now,i,j); step[x] += dfs(id); cur++; //system("pause"); } } } if( cur ) step[x] /= cur; return step[x]; } int main() { while(scanf("%s %s %s %s",card[0][1],card[0][2],card[0][3],card[0][4]) == 4 ) { for(int i=1;i<9;i++) for(int j=1;j<=4;j++) scanf("%s",card[i][j]); memset(step,0,sizeof(step)); memset(vis,0,sizeof(vis)); step[0]=1.0;vis[0]=true; double ans = dfs(Max); printf("%.6f\n",ans); } return 0; }
标签:
原文地址:http://blog.csdn.net/qq_32570675/article/details/51348822