A-Mio visits ACGN Exhibition
先提供一个错误的题解(dfs成功tle)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll ans,mod=998244353,a[510][510],n,m,p,q;
ll qpow(ll x,ll n){
ll res=1;
while(n){
if(n&1)res=res*x%mod;
x=x*x%mod;
n>>=1;
}
return res;
}
ll inv(ll x){ return qpow(x,mod-2); }
ll C(ll x,ll y){
ll res=1;
if(2*x>y)x=y-x;
for(ll i=1;i<=x;i++)
res=res*(y-i+1)%mod*inv(i)%mod;
return res;
}
void dfs(ll x,ll y,ll cnt0,ll cnt1){
cnt0+=(a[x][y]==0);
cnt1+=(a[x][y]==1);
if(cnt0>=p && cnt1>=q){
ans+=C(n-x,m-x+n-y);
ans%=mod;
}
else{
if(x<n)dfs(x+1,y,cnt0,cnt1);
if(y<m)dfs(x,y+1,cnt0,cnt1);
}
return;
}
int main(){
cin>>n>>m>>p>>q;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
dfs(1,1,0,0);
cout<<ans<<endl;
}
B- Continued Fraction
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int gcd(int a ,int b){
return !b ? a : gcd(b,a%b);
}
int a[10000];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll t,n,m,fac;
cin>>t;
while(t--){// m/n
ll cnt=0;
cin>>m>>n;
while(n!=1){
a[cnt++]=m/n;
m=m-(m/n)*n;
fac=gcd(m,n);
m/=fac,n/=fac;
swap(m,n);
}
cout<<cnt<<' ';
for(int i=0;i<cnt;i++)cout<<a[i]<<' ';
cout<<m<<endl;
}
return 0;
}
K-Many Littles Make a Mickle
题目大意:总共n层,每层n个房间,每个房间m个人,求总共可以多少人
sol:ans=
![]()
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll t,n,m;
cin>>t;
while(t--){
cin>>n>>m;
cout<<(n+1)*n/2*(2*n+1)*m/3<<endl;
}
return 0;
}
L-It Rains Again
#include<iostream>
#include<vector>
#include<algorithm>
#define ll long long
using namespace std;
int n,x1,x2,y1,y2,l,r,len;
vector< pair<int,int> > a;
bool cmp(pair<int,int> p1,pair<int,int> p2){
return p1.first<p2.first;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=0;i<n;i++){
cin>>x1>>y1>>x2>>y2;
a.push_back( make_pair(x1,x2) );
}
sort(a.begin(),a.end(),cmp);
l=a[0].first,r=a[0].second;
for(int i=1;i<a.size();i++){
if(a[i].first<=r){
r=max(r,a[i].second);
}
else {
len+=r-l;
l=a[i].first;
r=a[i].second;
}
}
len+=r-l;
cout<<len;
return 0;
}