Automatic Cheater Detection
没注意到难度取值范围小于十,于是写了个二分跑过去了,还挺快的。
#include<bits/stdc++.h>
using namespace std;
char r[9];
int t,q;
int main()
{
for(scanf("%d",&t); t--;)
{
scanf("%d",&q);
vector<int> dui,cuo;
long long ans=0;
for(int i=0,s,d; i<q; ++i)
{
scanf("%d%d%s",&d,&s,r);
if(s&&r[0]=='c')dui.push_back(d);
if(!s&&r[0]=='i')cuo.push_back(d);
}
sort(dui.begin(),dui.end());
sort(cuo.begin(),cuo.end());
for(int i=0; i<dui.size(); ++i)
ans+=lower_bound(cuo.begin(),cuo.end(),dui[i])-cuo.begin();
printf("%lld\n",ans);
}
}
Counting Weekend Days
#include<bits/stdc++.h>
using namespace std;
int mo(const string &s)
{
return s=="FEB"?28:
s=="APR"||s=="JUN"||s=="SEP"||s=="NOV"?30:31;
}
int da(const string &s)
{
return s=="SUN"?0:
s=="MON"?1:
s=="TUE"?2:
s=="WED"?3:
s=="THU"?4:
s=="FRI"?5:6;
}
int main()
{
int t,ans;
string mth,day;
for(cin>>t; t--; cout<<ans<<'\n')
{
cin>>mth>>day;
for(int i=ans=0,m=mo(mth),d=da(day); i<m; ++i,++d)
if(d%7>4)++ans;
}
}
Owllen
#include<bits/stdc++.h>
using namespace std;
char s[100009];
int t,kase,cnt[26];
int main()
{
for(scanf("%d",&t); t--;)
{
fill(cnt,cnt+26,0);
scanf("%s",s);
for(int i=0; s[i]; ++i)++cnt[s[i]-'a'];
printf("Case %d: %d\n",++kase,*min_element(cnt,cnt+26));
}
}
Sum of MSLCM
#include<bits/stdc++.h>
#define at operator[]
using namespace std;
const int N=2e7+7;
struct EulerSieve
{
vector<int> p,m;
EulerSieve(int N):m(N,0)
{
for(long long i=2,k; i<N; ++i)
{
if(!m[i])p.push_back(m[i]=i);
for(int j=0; j<p.size()&&(k=i*p[j])<N; ++j)
if((m[k]=p[j])==m[i])break;
}
}
} e(N);
typedef long long ll;
struct Solve:vector<ll>
{
Solve(int N):vector<ll>(N,0)
{
for(int i=2; i<N; ++i)at(i)=at(i-1)+cal(i);
}
ll cal(int x)
{
if(x==1)return 1;
if(at(x))return at(x)-at(x-1);
int t=e.m[x];
x/=t;
if(x%t==0)return cal(x)*(t+1)-cal(x/t)*t;
return cal(x)*(t+1);
}
} s(N);
int main()
{
for(int n; scanf("%d",&n),n;)printf("%lld\n",s[n]);
}
Design New Capital
写的ntt奇慢无比…
#include<bits/stdc++.h>
#define mul(a,b,c) (1LL*(a)*(b)%(c))
#define inv(a,b) pow(a,(b)-2,b)
using namespace std;
typedef int ll;
const ll N=1e5+7,M=7340033,G=3;
ll pow(ll a,ll b,ll m)
{
ll r=1;
for(; b; b>>=1,a=mul(a,a,m))
if(b&1)r=mul(r,a,m);
return r;
}
struct Factorial
{
vector<ll> fac,ifac;
ll M;
Factorial(int N,ll M):fac(N,1),ifac(N,1),M(M)
{
for(int i=1; i<N; ++i)fac[i]=mul(fac[i-1],i,M);
ifac[N-1]=inv(fac[N-1],M);
for(int i=N-1; i; --i)ifac[i-1]=mul(ifac[i],i,M);
}
ll c(int n,int m)
{
return m>n?0:mul(mul(fac[n],ifac[m],M),ifac[n-m],M);
}
} f(N,M);
template<typename T>
void rader(vector<T> &x)
{
for(int i=0,j=0,k; i<x.size()-1; ++i,j+=k)
{
if(i<j)swap(x[i],x[j]);
for(k=x.size()>>1; k<=j; k>>=1)j-=k;
}
}
void fntt(vector<ll> &x,ll inv,ll m,ll g)
{
rader(x);
if(inv!=1)inv=m-2;
for(int i=1,j; i<x.size(); i<<=1)
for(ll u=pow(g,mul(m/2/i,inv,m-1),m),w=1,t=j=0;
j<i; ++j,w=mul(w,u,m))
for(int k=j; k<x.size(); k+=i<<1)
{
t=mul(w,x[k+i],m);
if(x[k+i]=x[k]-t,x[k+i]<0)x[k+i]+=m;
if(x[k]+=t,x[k]>=m)x[k]-=m;
}
if(inv==1)return;
ll u=pow(x.size(),m-2,m);
for(int i=0; i<x.size(); ++i)x[i]=mul(x[i],u,m);
}
int t,n,kase;
int main()
{
for(scanf("%d",&t); t--;)
{
int cnt[4]= {0,0,0,0},len=1;
for(scanf("%d",&n); len<n*2;)len*=2;
vector<ll> a(len),b(len);
for(int i=0,x,y; i<n; ++i)
{
scanf("%d%d",&x,&y);
if(x>0&&y<0)++cnt[0];
if(x>0&&y>0)++cnt[1];
if(x<0&&y>0)++cnt[2];
if(x<0&&y<0)++cnt[3];
}
for(int i=0; i<=n; ++i)
a[i]=mul(f.c(cnt[0],i),f.c(cnt[2],i),M),b[i]=mul(f.c(cnt[1],i),f.c(cnt[3],i),M);
fntt(a,1,M,G),fntt(b,1,M,G);
for(int i=0; i<a.size(); ++i)a[i]=mul(a[i],b[i],M);
fntt(a,-1,M,G);
printf("Case %d:\n",++kase);
for(int i=1; i<=n; ++i)
printf("%lld%c",i%2?0:a[i/2],i==n?'\n':' ');
}
}
Numbered Cards
#include<bits/stdc++.h>
#define mul(a,b,c) (1LL*(a)*(b)%(c))
using namespace std;
const int N=1e9+7,M=1e9+7;
long long t,n,casenum,f[11][1<<11],u[11][1<<11],g[1<<11],h[1<<11];
long long ans[1<<11][1<<11];
int main()
{
f[0][0]=1;
for (int i=1; i<10; ++i)f[1][1<<i]=1;
for(int i=1; i<10; ++i)
for(int j=1<<10; j--;)
for(int k=1<<9; k; k>>=1)
f[i+1][j|k]=(f[i+1][j|k]+f[i][j])%M;
u[0][0]=1;
for(int i=0; i<10; ++i)
for(int j=1<<10; j--;)
for(int k=1<<9; k; k>>=1)
u[i+1][j|k]=(u[i+1][j|k]+u[i][j])%M;
// for (int i=1;i<1<<6;i++) printf("%d ",f[2][i]);
for(scanf("%lld",&t); t--;)
{
fill(g,g+(1<<10),0);
vector<int> v;
scanf("%lld",&n);
for(int j=n+1; j; j/=10)v.push_back(j%10);
for(int i=1; i<v.size(); ++i)
for(int j=1<<10; j--;)
g[j]=(g[j]+f[i][j])%M;
for(int i=v.size()-1,now=0; ~i; --i)
{
for(int j=i==v.size()-1?1:0; j<v[i]; ++j)
for(int k=1<<10; k--;) g[k|now|1<<j]=(g[k|now|1<<j]+u[i][k])%M;
now|=1<<v[i];
}
/*
for(int i=1;i<(1<<10);i++)
if (g[i]) printf("%d %d\n",i,g[i]);
*/
memset(ans,0,sizeof(ans));
ans[0][0]=1;
for(int i=0;i<(1<<10)-1;i++)
for(int j=0;j<1<<10;j++)
{
ans[i+1][j]=(ans[i+1][j]+ans[i][j])%M;
if (((i+1)&j)==0) ans[i+1][(i+1)|j]=(ans[i+1][(i+1)|j]+(ans[i][j]*g[i+1])%M)%M;
}
long long val=0;
for (int i=0;i<1<<10;i++) val=(val+ans[(1<<10)-1][i])%M;
val=(val+M-1)%M;
printf("Case %lld: %lld\n",++casenum,val);
}
}