2018多校4

B

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
#include<string>
#include<vector>
#include<set>
#include<bitset>
#include<algorithm>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
#define ull unsigned long long
#define endl '\n'
const double pi = acos(-1);
const int maxn = 1e5 + 10;
const int maxm = 1200;
const ll mod = 1e9 + 7;
int t, block;
int belong[maxn];
ll ans, temp;
ll fact[maxn], Ans[maxn], inv[maxn];
struct node{
    int l, r, id;
}q[maxn];
bool cmp(node a,node b){
    return (a.r/block)==(b.r/block)?a.l<b.l:a.r<b.r;
}
ll ksm(ll a, ll b){
    ll ans = 1, base = a % mod;
    while(b){
        if(b & 1) ans = (ans * base) % mod;
            base = (base * base) % mod;
        b >>= 1;
    }
    return ans % mod;
}
ll C(int n,int k)
{
    return fact[n]*inv[k]%mod*inv[n-k]%mod;
}
void addn(int l,int r)
{
    ans = (2*ans%mod - C(l-1,r)+mod)%mod;
}
void addm(int l,int r)
{
    ans = (ans+C(l,r))%mod;
}
void deln(int l,int r)
{
    ans = (ans+C(l-1,r))%mod *temp %mod;
}
void delm(int l,int r)
{
    ans = (ans-C(l,r)+mod)%mod;
}
int main(){
    scanf("%d", &t);
    for(int i = 1 ; i <= t ; ++ i){
        scanf("%d %d", &q[i].l, &q[i].r);
        q[i].id = i;
    }
    int n = 100000;
    block=sqrt(n);
    fact[0] = 1;
    for(int i=1;i<=n;i++)
    {
        fact[i] = (fact[i-1] * i) % mod;
        belong[i]=(i-1)/block+1;
    }
    inv[n-1]=ksm(fact[n-1],mod-2);
    for(int i=n-2 ; i>=0 ; i--) inv[i] = inv[i+1]*(i+1) % mod;
    temp = ksm(2, mod-2);
    sort(q+1,q+1+t,cmp);
    int l = 5;
    int r = 2;
    ans = 16;
    for(int i = 1 ; i <= t ; ++ i){
        while(l<q[i].l) addn(++l,r);
        while(r<q[i].r) addm(l,++r);
        while(l>q[i].l) deln(l--,r);
        while(r>q[i].r) delm(l,r--);
        Ans[q[i].id] = ans;
    }
    for(int i = 1 ; i <= t ; ++ i)
        cout << Ans[i] << endl;
    return 0;
}

D

#include<bits\stdc++.h>
using namespace std;
const int maxn = 1e6+7;
#define ll long long 
ll  a[maxn];
int  n,m;
int main(){
	int t,x,y;
	scanf("%d",&t);
	while (t--){
		ll ans =1;
		int cnt =1;
		scanf("%d%d",&n,&m);
		for(int i =1;i<=n;i++)
		{
			scanf("%d%d",&x,&y);
			a[i] = x+y;
		}
		sort(a+1,a+1+n);
		while(1){
			if(ans*a[cnt]>m)break;
			ans *= a[cnt++];
			if(cnt>n){
				break;
			}
		}
		printf("%d\n",cnt-1);
	}
	return 0;

} 

E

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
ll a[200][200],l[200]; 
int n;
ll Sum(int x,int y){
	 if(x < 0 || y < 0) {
        return 0;
    }
	int N = (n<<1)	;
	ll ans  = a[N-1][N-1]*((x+1)/N)*((y+1)/N);
	int xx = x%N,yy= y%N;
	
	if(xx != N-1)ans	+=	a[xx][N-1]*((y+1)/N);
		
	if(yy != N-1)ans	+=	a[N-1][yy]*((x+1)/N);
	
	if(xx!=N-1&&yy!=N-1) ans +=a[xx][yy];
	
	return ans ;
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--) 
	{
		scanf("%d",&n);	
		for(int i=0;i<n;i++)
		scanf("%d",&l[i]);
		int cnt = 0;
		for(int i =0;i<200;i++)
		{
			for(int j =0;j<=i;j++){
					a[j][i - j]  =l[cnt];
					cnt = (cnt+1)%n;
			}
		}
		for(int i=0;i<200;i++)
		{
			for(int j=0;j<200;j++)
			{
				if(i!=0)a[i][j] += a[i-1][j];
				if(j!=0)a[i][j] += a[i][j-1];
				if(i!=0&&j!=0) a[i][j] -= a[i-1][j-1];
			}
		}
		int q;
		scanf("%d",&q);
		while(q--)
		{	
			int x1,x2,y1,y2;
			scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
			ll ans = Sum(x2, y2) + Sum(x1 - 1, y1 - 1);
            ans -= Sum(x2, y1 - 1) + Sum(x1 - 1, y2);
            printf("%lld\n",  ans);

		}
	}
} 

K

#include<bits\stdc++.h>
using namespace std;
const int maxn = 1e6+7;
#define ll long long 
char ss[maxn];
int  n;
int main(){
	int n;
	scanf("%d",&n);
	while(n--){
		int Flag = 1,flag = 1;
		scanf("%s",ss);
		char op ;
		int len = strlen(ss);
		if(ss[0]=='*'||ss[0]=='+'){
			printf("IMPOSSIBLE\n");
			continue;
		}
		if(ss[0]=='?')
		{
			for(int i=0;i<len;i++){
				if(ss[i]=='?')ss[i]='1';
				if(ss[i]=='+'||ss[i]=='*')
				{
					if(ss[i+1]=='*'||ss[i+1]=='+'){Flag = 0;break;}
					else if(ss[i+1]=='0')
						{	if(i+2<len)
							{
								if(ss[i+2]=='+'||ss[i+2]=='*')continue;
								else if(ss[i+2]=='?')ss[i+2]='+';
								else {Flag = 0;break;}
						 	} 
						}
				}
			}
		}
	//shuzi
		else{
			 if(ss[0]=='0')
			 {
			 	if(len==1){
			 		printf("%s\n",ss);continue;
			 	}
			 	if(ss[1]=='?'){ss[1]='+';}
			 	if(ss[1]=='*'||ss[1]=='+')
			 	 {
			 		for(int i=1;i<len;i++)
					{
						if(ss[i]=='?')ss[i]='1';
						if(ss[i]=='+'||ss[i]=='*')
						{
							if(ss[i+1]=='*'||ss[i+1]=='+'){Flag = 0;break;}	
							else if(ss[i+1]=='0')
							{	
								if(i+2<len)
								{
									if(ss[i+2]=='+'||ss[i+2]=='*')continue;
									else if(ss[i+2]=='?')ss[i+2]='+';
									else {Flag = 0;break;}
								} 
								
							}			
						}
					}
			     }
			 	else Flag=0;
			 } 
			 else {
			 		for(int i=0;i<len;i++)
					 {
					 	if(ss[i]=='?')ss[i]='1';
					 	if(ss[i]=='+'||ss[i]=='*'){
				  	 	if(ss[i+1]=='*'||ss[i+1]=='+'){Flag = 0;break;}
						else if(ss[i+1]=='0')
							{
								if(i+2<len)
								{
									if(ss[i+2]=='+'||ss[i+2]=='*')continue;
									else if(ss[i+2]=='?')ss[i+2]='+';
									else {Flag = 0;break;}
								}
							}			
						}
					}
			 	}
		}
		if(Flag ==0||ss[len-1]=='*'||ss[len-1]=='+'){
			printf("IMPOSSIBLE\n");
		}
		else printf("%s\n",ss);
	}
	return 0;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值