#include<bits/stdc++.h>#define int long long#define mk make_pairusingnamespace std;constint N =1e6+7;constint mod =1e9+7;int t,n,m,k;int a[N];int sum[N];signedmain(){int t =1,cas =1;scanf("%lld",&t);while(t--){scanf("%lld",&n);printf("Case #%lld: %lld\n",cas++,n/3);}return0;}
#include<bits/stdc++.h>#define int long long#define mk make_pairusingnamespace std;constint N =3e5+11;constint mod =1e9+7;int t,n,m,k;int a[N];int selected[N];boolcheck(int x){int pos =0;for(int i =0; i < x ; i ++)
selected[i]= a[i];//for(int j = 0 ; j < x ; j ++)printf("%lld ",selected[j]);printf("\n");int cnt =1;for(int i = x ; i < n ; i ++){if(a[i]*2<= selected[pos]){
selected[pos]= a[i];
pos ++;if(pos == x){//for(int j = 0 ; j < x ; j ++)printf("%lld ",selected[j]);printf("\n");
pos =0;
cnt ++;}}}return cnt >= k;}signedmain(){int t =1,cas =1;scanf("%lld",&t);int tt = t;while(t--){scanf("%lld%lld",&n,&k);for(int i =0; i < n ; i ++)scanf("%lld",&a[i]);sort(a,a+n,greater<int>());int l =1;int r = n/k;int res =0;while(l <= r ){int mid =(l+r)>>1;//cout<<mid<<endl;if(check(mid)){
res =max(mid,res);
l = mid+1;}else{
r = mid-1;}}printf("Case #%lld: %lld\n",cas++,res);}return0;}
#include<bits/stdc++.h>#define int long longusingnamespace std;constint N =1e6+7;constint mod =1e9+7;int t,n,m,k;longdouble a[N],b[N];longdouble one =1.0;signedmain(){int t;
cin>>t;for(int cas =1; cas <= t ; cas ++){
cin>>n;for(int i =0; i < n ; i ++){longdouble x,y;char buf;
cin>>x>>buf>>y;
a[i]=1.0/(1.0+y/x);}sort(a,a+n);longdouble sum =0;int res =0;for(int i =0; i < n ; i ++){if(sum+a[i]<1.0){
sum += a[i];
res ++;}}
cout<<"Case #"<<cas<<": "<<res<<endl;}return0;}
H. Great Cells
题意:给定一个n*m的网格。然后往里面填数字。如果一个点是该行和该列的严格的最大值,那么他就是一个 Great Cell。现在要求。网格中有 0和g点,1个g点, … , n*m个g点的所有的方案数加权求和是多少。
#include<bits/stdc++.h>#define int long long#define mk make_pairusingnamespace std;constint N =3e5+11;constint mod =1e9+7;int t,n,m,k;int a[N];intqpow(int a,int b){int res =1;int tmp = a;while(b){if(b&1) res =(res*tmp)%mod;
tmp =(tmp*tmp)%mod;
b >>=1;}return res;}signedmain(){int t =1,cas =1;scanf("%lld",&t);while(t--){scanf("%lld%lld%lld",&n,&m,&k);int res =0;for(int i =0; i < k ; i ++){
res =((res+qpow(i,n+m-2)))%mod;}
res = res*qpow(k,(n-1)*(m-1)%mod)%mod;
res = res*n%mod*m%mod+qpow(k,n*m%mod)%mod;
res %= mod;printf("Case #%lld: %lld\n",cas++,res);}return0;}