• AtCoder Beginner Contest 154 题解


    传送门:https://atcoder.jp/contests/abc154/tasks

    A

    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
    	string a, b; cin>>a>>b;
    	int x, y; cin>>x>>y;
    	string u; cin>>u;
    	if(u==a) x--; else y--;
    	cout<<x<<' '<<y<<endl;
    	return 0;
    }
    

    B

    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
    	string s; cin>>s;
    	int n=s.size();
    	while(n--) cout<<'x';
    	return 0;
    }
    

    C

    #include<bits/stdc++.h>
    using namespace std;
    
    map<int, int> mp;
    int main(){
    	int n; cin>>n;
    	
    	bool ok=true;
    	while(n--){
    		int v; cin>>v;
    		mp[v]++;
    		if(mp[v]==2){
    			ok=false;
    			break;
    		}	
    	}
    	puts(ok? "YES": "NO");
    	
    	return 0;
    }
    

    D

    很简单的求个期望

    #pragma GCC optimize("O3")
    #include<bits/stdc++.h>
    using namespace std;
    #define endl '
    '
    #define debug(x) cerr << #x << ": " << x << endl
    #define pb(a) push_back(a)
    #define set0(a) memset(a,0,sizeof(a))
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define dwn(i,a,b) for(int i=(a);i>=(b);i--)
    #define ceil(a,b) (a+(b-1))/b
    #define INF 0x3f3f3f3f
    #define ll_INF 0x7f7f7f7f7f7f7f7f
    typedef long long ll;
    typedef pair<int,int> PII;
    typedef pair<double,double> PDD;
    
    #define int long long
    
    inline void read(int &x) {
        int s=0;x=1;
        char ch=getchar();
        while(ch<'0'||ch>'9') {if(ch=='-')x=-1;ch=getchar();}
        while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+ch-'0',ch=getchar();
        x*=s;
    }
    
    const int N=2e5+5;
    int n, k;
    int w[N], s[N];
    
    signed main(){
    	read(n), read(k);
    	rep(i,1,n) read(w[i]), s[i]=s[i-1]+w[i];
    	
    	int res=0;
    	rep(i,k,n) res=max(res, s[i]-s[i-k]);
    	double ans=(double)(res+k)/2;
    	printf("%.8lf", ans);
    	
        return 0;
    }
    

    E

    恶心的分类讨论 qwq

    #pragma GCC optimize("O3")
    #include<bits/stdc++.h>
    using namespace std;
    #define endl '
    '
    #define debug(x) cerr << #x << ": " << x << endl
    #define pb(a) push_back(a)
    #define set0(a) memset(a,0,sizeof(a))
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define dwn(i,a,b) for(int i=(a);i>=(b);i--)
    #define ceil(a,b) (a+(b-1))/b
    #define INF 0x3f3f3f3f
    #define ll_INF 0x7f7f7f7f7f7f7f7f
    typedef long long ll;
    typedef pair<int,int> PII;
    typedef pair<double,double> PDD;
    
    inline void read(int &x) {
        int s=0;x=1;
        char ch=getchar();
        while(ch<'0'||ch>'9') {if(ch=='-')x=-1;ch=getchar();}
        while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+ch-'0',ch=getchar();
        x*=s;
    }
    
    string s;
    int k;
    
    int C(int a, int b){
    	if(b>a) return 0;
    	int res=1;
    	dwn(i,a,a-b+1) res*=i;
    	int down=1;
    	rep(i,1,b) down*=i;
    	return res/down;
    }
    
    int cal(string s){
    	int n=s.size();
    	if(!n) return 0;
    	
    	int res=0;
    	res+=C(n-1, 2)*9*9;
    	
    	res+=(s[0]-'0'-1)*(n-1)*9;
    	
    	int p=-1;
    	rep(i,1,n-1) if(s[i]!='0'){
    		p=i;
    		break;
    	}
    	
    	if(p==-1) return res;
    	else{
    		int last=n-p;
    		res+=s[p]-'0'+(last-1)*9;
    		return res;
    	}
    }
    
    int main(){
    	cin>>s>>k;
    	int n=s.size();
    	if(k==1){
    		int res=0;
    		res+=s[0]-'0';
    		res+=(n-1)*9;
    		cout<<res<<endl;
    	}
    	else if(k==2){
    		cout<<cal(s)<<endl;
    	}
    	else{
    		int res=0;
    		res+=C(n-1, 3)*9*9*9;
    		
    		res+=(s[0]-'0'-1)*C(n-1, 2)*9*9;
    		
    		int p=-1;
    		rep(i,1,n-1) if(s[i]!='0'){
    			p=i;
    			break;
    		}
    		
    		if(p==-1) cout<<res<<endl;
    		else{
    			res+=cal(s.substr(p));
    			cout<<res<<endl;
    		}
    	}
        return 0;
    }
    

    F

    由题意,(f(i,j)) 表示从 ((0,0))((i,j)) 的方案数,显然,(f(i,j) = C_{i+j}^j = C_{i+j}^i) (这样考虑:从 ((0,0))((i,j)) 需要沿 (x) 轴方向走 (i) 步,沿 (y) 轴方向走 (j) 步,共 (i+j) 步,这 (i+j) 步中可以选择 (i) 步沿 (x) 轴方向走剩下的沿 (y) 方向)。

    (f(i, j)) 有这样一个性质:(f(i, j) = sum_{k=0}^j f(i-1, k))

    这个性质的证明如下:
    显然 (i = 1) 时上式成立。
    (i = u-1) 时上式成立,那么 (i = u)
    (f(u, j) = C_{u+j}^j = C_{u+j-1}^{j-1} + C_{u+j-1}^j = C_{u+j-1}^{j-1} + f(u-1, j) = sum_{k=0}^{j-1} f(u-1, k) + f(u-1, j) = sum_{k=0}^j f(u-1, k))

    证毕

    使用容斥原理进行进一步化简,
    只需求的柿子式子为:(sum_{i=0}^r sum_{j=0}^c C_{i+j}^i)

    对上式变换:
    (sum_{i=0}^r sum_{j=0}^c f(i, j) = sum_{i=0}^rf(i+1, c))
    对这个柿子进行枚举统计即可。

    #pragma GCC optimize("O3")
    #include<bits/stdc++.h>
    using namespace std;
    #define endl '
    '
    #define debug(x) cerr << #x << ": " << x << endl
    #define pb(a) push_back(a)
    #define set0(a) memset(a,0,sizeof(a))
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define dwn(i,a,b) for(int i=(a);i>=(b);i--)
    #define ceil(a,b) (a+(b-1))/b
    #define INF 0x3f3f3f3f
    #define ll_INF 0x7f7f7f7f7f7f7f7f
    typedef long long ll;
    typedef pair<int,int> PII;
    typedef pair<double,double> PDD;
    
    #define int long long 
    
    inline void read(int &x) {
        int s=0;x=1;
        char ch=getchar();
        while(ch<'0'||ch>'9') {if(ch=='-')x=-1;ch=getchar();}
        while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+ch-'0',ch=getchar();
        x*=s;
    }
    
    const int N=2e6+6, mod=1e9+7;
    
    ll fpow(ll x,ll p)
    {
        ll res=1;
        for(;p;p>>=1,x=x*x%mod)
            if(p&1)res=res*x%mod;
        return res%mod;
    }
    
    ll inv(ll x){
    	return fpow(x,mod-2)%mod;
    }
    
    ll fac[N];
    
    void init(){
    	fac[0]=1;
    	for(int i=1; i<N; i++) fac[i]=fac[i-1]*i%mod;
    }
    
    ll C(ll a, ll b){
    	return fac[a]*inv(fac[b])%mod*inv(fac[a-b])%mod;
    }
    
    
    int f(int i, int j){
    	return C(i+j, i);
    }
    
    int cal(int r, int c){
    	int res=0;
    	rep(i,0,r) res+=f(i+1, c);
    	cerr<<"imsb"<<endl;
    	return res; 
    }
    
    signed main(){
    	init();
    	int r1, c1, r2, c2; cin>>r1>>c1>>r2>>c2;
    	// debug(cal(0, 0));
    	int res=cal(r2, c2)-cal(r1-1, c2)-cal(r2, c1-1)+cal(r1-1, c1-1);
    	cout<<(res%mod+mod)%mod<<endl;
    	
        return 0;
    }
    
  • 相关阅读:
    July 22nd 2017 Week 29th Saturday
    July 21st 2017 Week 29th Friday
    社交类APP原型模板分享——QQ
    专访UI中国认证设计师卤大湿 | 一位UI大师关于UI设计的思考
    第十届Mockplus ▪ UXPA用户体验西南赛区决赛成功举行
    【附案例】UI交互设计不会做?设计大神带你开启动效灵感之路
    旅游类APP原型模板分享——爱彼迎
    有了这款自动标注/切图神器,攻城狮终于可以省心了
    设计师升职加薪必须知道的10个设计网站
    官网类原型模板分享——Apple
  • 原文地址:https://www.cnblogs.com/Tenshi/p/14908735.html
Copyright © 2020-2023  润新知