Codeforces1228 总结 D图论

https://codeforces.com/contest/1228/problem/D
B 考虑哪些位置是连续黑的后的第一个间断位置 不能放 -1
先按行放完 1 边界为-1
再按列放时考虑 现在该放1连续的地方之前为-1边界 不可能
在现在边界该放-1的位置 之前放的是1 不可能
所有未被访问的位置 可放可不放

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
typedef long long ll;
typedef pair<ll,ll> pll;
const int maxn=1e5+5;
const int INF=0x3f3f3f3f;
const ll inf=0x3f3f3f3f3f3f3f3f;
const ll mod=1e9+7;
ll n,m,k,cnt,tmp,res,T,maxx,ans;
ll r[maxn],c[maxn],vis[1005][1005];
string s;
 
int main(){
	
	cin>>n>>m;
	rep(i,1,n){
		cin>>r[i];
	}
	rep(i,1,m){
		cin>>c[i];
	}
	rep(i,1,n){
		rep(j,1,r[i]){
			vis[i][j]=1;
		}
		vis[i][r[i]+1]=-1;
	}
	rep(i,1,m){
		rep(j,1,c[i]){
			if(vis[j][i]==-1)
				return cout<<0<<endl,0;
			vis[j][i]=1;
			
		}
		if(vis[c[i]+1][i]==1)
			return cout<<0<<endl,0;
		vis[c[i]+1][i]=-1;
	}
	ans=1;
	rep(i,1,n){
		rep(j,1,m){
			if(!vis[i][j]){
				ans=ans*2%mod;
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}

C 质因子 1e18内的数质因子不超过20个

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
#define pb push_back
typedef long long ll;
const ll mod=1e9+7;
ll x,n,ans=1;
vector<ll> v;
ll pow_mod(ll a,ll b,ll mod)
{
	ll res=1;
	while(b){
		if(b&1){
			res=res*a%mod;
			
		}
		a=a*a%mod;
		b>>=1;
	}
	return res;
}
int main(){
	cin>>x>>n;
	for(int i=2;i*i<=x;i++){
		if(x%i==0){
			v.pb(i);
			x=x/i;
			while(x%i==0){
				x=x/i;
			}
		}
	}
	if(x!=1)
		v.pb(x);
	ll len=v.size();
	for(int i=0;i<len;i++){
		ll now=v[i],tmp=n;
		while(tmp>0){
			ll cnt=tmp/now;
			ans=ans*pow_mod(now,cnt,mod)%mod;
			tmp=tmp/now;
		}
	}
	cout<<ans%mod<<endl;
	return 0;
}

D

在这里插入代码片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值