A. ASCII Addition

模拟

#include <iostream>
#include <sstream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <cstring>
#include <bitset>
#include <functional>
#include <random>
#define REP(_i,_a,_n) for(int _i=_a;_i<=_n;++_i)
#define PER(_i,_a,_n) for(int _i=_n;_i>=_a;--_i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl '\n'
#define DB(_a) ({REP(_i,1,n) cout<<_a[_i]<<',';hr;})
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+, INF = 0x3f3f3f3f;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n) {ll r=%P;for (a%=P;n;a=a*a%P,n>>=)if(n&)r=r*a%P;return r;}
ll inv(ll x){return x<=?:inv(P%x)*(P-P/x)%P;}
inline int rd() {int x=;char p=getchar();while(p<''||p>'')p=getchar();while(p>=''&&p<='')x=x*+p-'',p=getchar();return x;}
//head const int N = 1e6+;
char s[][N],ans[][N]; int id(int i) {
if (string(s[]+i,s[]+i+)=="....x") {
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
return ;
}
if (string(s[]+i,s[]+i+)=="xxxxx") {
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="xxxxx")
if (string(s[]+i,s[]+i+)=="x....")
if (string(s[]+i,s[]+i+)=="x....")
if (string(s[]+i,s[]+i+)=="xxxxx")
return ;
}
if (string(s[]+i,s[]+i+)=="xxxxx") {
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="xxxxx")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="xxxxx")
return ;
}
if (string(s[]+i,s[]+i+)=="x...x") {
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="xxxxx")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
return ;
}
if (string(s[]+i,s[]+i+)=="xxxxx") {
if (string(s[]+i,s[]+i+)=="x....")
if (string(s[]+i,s[]+i+)=="x....")
if (string(s[]+i,s[]+i+)=="xxxxx")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="xxxxx")
return ;
}
if (string(s[]+i,s[]+i+)=="xxxxx") {
if (string(s[]+i,s[]+i+)=="x....")
if (string(s[]+i,s[]+i+)=="x....")
if (string(s[]+i,s[]+i+)=="xxxxx")
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="xxxxx")
return ;
}
if (string(s[]+i,s[]+i+)=="xxxxx") {
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
return ;
}
if (string(s[]+i,s[]+i+)=="xxxxx") {
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="xxxxx")
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="xxxxx")
return ;
}
if (string(s[]+i,s[]+i+)=="xxxxx") {
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="xxxxx")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="....x")
if (string(s[]+i,s[]+i+)=="xxxxx")
return ;
}
if (string(s[]+i,s[]+i+)=="xxxxx") {
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="x...x")
if (string(s[]+i,s[]+i+)=="xxxxx")
return ;
}
return -;
} void add(int x, int y, string s) {
ans[x][y]=s[],ans[x][y+]=s[],ans[x][y+]=s[],ans[x][y+]=s[],ans[x][y+]=s[];
}
int tot;
void pr(int x) {
++tot;
if (x==) {
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"....x");
}
if (x==) {
add(,tot,"xxxxx");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"xxxxx");
add(,tot,"x....");
add(,tot,"x....");
add(,tot,"xxxxx");
}
if (x==) {
add(,tot,"xxxxx");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"xxxxx");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"xxxxx");
}
if (x==) {
add(,tot,"x...x");
add(,tot,"x...x");
add(,tot,"x...x");
add(,tot,"xxxxx");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"....x");
}
if (x==) {
add(,tot,"xxxxx");
add(,tot,"x....");
add(,tot,"x....");
add(,tot,"xxxxx");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"xxxxx");
}
if (x==) {
add(,tot,"xxxxx");
add(,tot,"x....");
add(,tot,"x....");
add(,tot,"xxxxx");
add(,tot,"x...x");
add(,tot,"x...x");
add(,tot,"xxxxx");
}
if (x==) {
add(,tot,"xxxxx");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"....x");
}
if (x==) {
add(,tot,"xxxxx");
add(,tot,"x...x");
add(,tot,"x...x");
add(,tot,"xxxxx");
add(,tot,"x...x");
add(,tot,"x...x");
add(,tot,"xxxxx");
}
if (x==) {
add(,tot,"xxxxx");
add(,tot,"x...x");
add(,tot,"x...x");
add(,tot,"xxxxx");
add(,tot,"....x");
add(,tot,"....x");
add(,tot,"xxxxx");
}
if (x==) {
add(,tot,"xxxxx");
add(,tot,"x...x");
add(,tot,"x...x");
add(,tot,"x...x");
add(,tot,"x...x");
add(,tot,"x...x");
add(,tot,"xxxxx");
}
tot += ;
} int a[N],cnt;
int main() {
REP(i,,) scanf("%s",s[i]+);
int len = strlen(s[]+);
REP(i,,len) {
a[++cnt] = id(i);
i += ;
}
ll L = , R = ;
REP(i,,cnt) {
if (a[i]==-) {
REP(j,i+,cnt) R = R*+a[j];
break;
}
L = L*+a[i];
}
L += R;
int s[],cnt=;
while (L) s[++cnt]=L%,L/=;
PER(i,,cnt) {
pr(s[i]);
if (i!=) {
++tot;
ans[][tot]='.';
ans[][tot]='.';
ans[][tot]='.';
ans[][tot]='.';
ans[][tot]='.';
ans[][tot]='.';
ans[][tot]='.';
}
}
REP(i,,) puts(ans[i]+);
}

B. Book Borders

直接二分模拟就能过

#include <iostream>
#include <sstream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <cstring>
#include <bitset>
#include <functional>
#include <random>
#define REP(_i,_a,_n) for(int _i=_a;_i<=_n;++_i)
#define PER(_i,_a,_n) for(int _i=_n;_i>=_a;--_i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl '\n'
#define DB(_a) ({REP(_i,1,n) cout<<_a[_i]<<',';hr;})
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+, INF = 0x3f3f3f3f;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n) {ll r=%P;for (a%=P;n;a=a*a%P,n>>=)if(n&)r=r*a%P;return r;}
ll inv(ll x){return x<=?:inv(P%x)*(P-P/x)%P;}
inline int rd() {int x=;char p=getchar();while(p<''||p>'')p=getchar();while(p>=''&&p<='')x=x*+p-'',p=getchar();return x;}
//head const int N = 1e6+;
int n,a,b,sum[N];
string s[N],t; int len(int i, int j) {
return sum[j]-sum[i-]+j-i;
} int main() {
getline(cin,t);
stringstream ss(t);
while (ss>>t) s[++n]=t;
cin>>a>>b;
REP(i,,n) sum[i]=sum[i-]+s[i].size();
REP(x,a,b) {
int t = , ans = ;
while (t<=n) {
int l=t,r=n,pos=-;
while (l<=r) {
if (len(t,mid)<=x) pos=mid,l=mid+;
else r=mid-;
}
if (ans) ans += s[t].size()+;
else ans += s[t].size();
t = pos+;
}
printf("%d\n",ans);
}
}

D. Digit Division

求出所有可划分的位置, 如果位置$n$不能划分那么显然无解, 否则为$2^{cnt-1}$

#include <iostream>
#include <sstream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <cstring>
#include <bitset>
#include <functional>
#include <random>
#define REP(_i,_a,_n) for(int _i=_a;_i<=_n;++_i)
#define PER(_i,_a,_n) for(int _i=_n;_i>=_a;--_i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl '\n'
#define DB(_a) ({REP(_i,1,n) cout<<_a[_i]<<',';hr;})
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+, INF = 0x3f3f3f3f;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n) {ll r=%P;for (a%=P;n;a=a*a%P,n>>=)if(n&)r=r*a%P;return r;}
ll inv(ll x){return x<=?:inv(P%x)*(P-P/x)%P;}
inline int rd() {int x=;char p=getchar();while(p<''||p>'')p=getchar();while(p>=''&&p<='')x=x*+p-'',p=getchar();return x;}
//head const int N = 1e6+;
int n,m;
char s[N]; int main() {
scanf("%d%d%s",&n,&m,s+);
ll t = , cnt = ;
REP(i,,n) {
t = (t*+s[i]-'')%m;
if (!t) ++cnt;
}
if (t) return puts(""),;
printf("%d\n",qpow(,cnt-));
}

F. Frightful Formula

先考虑$c=0$的情况

对于$t_i$, 考虑从$(2,i)$到$(n,n)$的所有路径, 可以得到贡献为$a^{n-i}b^{n-1}\binom{2n-i-2}{n-i}$.

对于$l_i$, 贡献为$a^{n-1}b^{n-i}\binom{2n-i-2}{n-i}$

然后再考虑$c$的贡献, 相当于是以所有点$(i,j)$为起点,终点为$(n,n)$的路径贡献和

也就是$\sum\limits_{i=2}^n\sum\limits_{j=2}^n a^{n-j}b^{n-i}\binom{2n-i-j}{n-i}$

枚举$i+j$,那么这个式子可以看成卷积,然后用任意模数$NTT$来求.

还有一种方法是设$g_{i,j}=f_{i,j}+\frac{c}{a+b-1}$, 那么$g_{i,j}=ag_{i,j-1}+bg_{i-1,j}$, 这样就可以避免求$c$的贡献

#include <iostream>
#include <sstream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <cstring>
#include <bitset>
#include <functional>
#include <random>
#define REP(_i,_a,_n) for(int _i=_a;_i<=_n;++_i)
#define PER(_i,_a,_n) for(int _i=_n;_i>=_a;--_i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl '\n'
#define DB(_a) ({REP(_i,1,n) cout<<_a[_i]<<',';hr;})
using namespace std;
typedef long long ll;
const int P = 1e6+;
ll qpow(ll a,ll n) {ll r=%P;for (a%=P;n;a=a*a%P,n>>=)if(n&)r=r*a%P;return r;} const int N = 5e5+;
int n,a,b,c,l[N],t[N];
int fac[N],ifac[N],pa[N],pb[N];
ll C(int n, int m) {
return (ll)fac[n]*ifac[m]%P*ifac[n-m]%P;
}
int main() {
scanf("%d%d%d%d",&n,&a,&b,&c);
fac[]=pa[]=pb[]=;
REP(i,,N-) {
pa[i]=(ll)pa[i-]*a%P;
pb[i]=(ll)pb[i-]*b%P;
fac[i]=(ll)fac[i-]*i%P;
}
ifac[N-] = qpow(fac[N-],P-);
PER(i,,N-) ifac[i]=(ll)ifac[i+]*(i+)%P;
int k = (ll)c*qpow(a+b-,P-)%P;
REP(i,,n) scanf("%d",l+i),l[i]=(l[i]+k)%P;
REP(i,,n) scanf("%d",t+i),t[i]=(t[i]+k)%P;
int ans = ;
REP(i,,n) {
ans = (ans+(ll)l[i]*pa[n-]%P*pb[n-i]%P*C(*n-i-,n-i))%P;
ans = (ans+(ll)t[i]*pb[n-]%P*pa[n-i]%P*C(*n-i-,n-i))%P;
}
ans = (ans-k)%P;
if (ans<) ans+=P;
printf("%d\n",ans);
}

K. Kernel Knights

大意: 给定二分图, 每个点出度为$1$. 求一个核, 满足核内的点之间没边, 核外每个点都与核内有一条方向从内向外的边.

出度为$1$, 那么就保证每个点最多属于一个环, 二分图就保证只有偶环. 所以可以先拓排一下, 最后处理一下偶环即可.

#include <iostream>
#include <sstream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <cstring>
#include <bitset>
#include <functional>
#include <random>
#define REP(_i,_a,_n) for(int _i=_a;_i<=_n;++_i)
#define PER(_i,_a,_n) for(int _i=_n;_i>=_a;--_i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl '\n'
#define DB(_a) ({REP(_i,1,n) cout<<_a[_i]<<',';hr;})
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+, INF = 0x3f3f3f3f;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n) {ll r=%P;for (a%=P;n;a=a*a%P,n>>=)if(n&)r=r*a%P;return r;}
ll inv(ll x){return x<=?:inv(P%x)*(P-P/x)%P;}
inline int rd() {int x=;char p=getchar();while(p<''||p>'')p=getchar();while(p>=''&&p<='')x=x*+p-'',p=getchar();return x;}
//head const int N = 1e6+;
int n, deg[N], nxt[N];
queue<int> q;
int vis[N],ans[N]; int main() {
scanf("%d", &n);
REP(i,,*n) scanf("%d",nxt+i),++deg[nxt[i]];
REP(i,,*n) if (!deg[i]) q.push(i),vis[i]=;
while (q.size()) {
int u = q.front(); q.pop();
int v = nxt[u];
if (ans[u]!=) ans[u] = ;
if (vis[v]) continue;
if (ans[u]==) ans[v]=,vis[v]=,q.push(v);
if (vis[v]) continue;
if (!--deg[v]) vis[v]=,q.push(v);
}
REP(i,,*n) if (!vis[i]) {
int now = i, cur = ;
while (!vis[now]) {
cur ^= ;
vis[now] = ;
if (cur) ans[now] = ;
now = nxt[now];
}
}
REP(i,,*n) if (ans[i]==) printf("%d ",i);hr;
}

gym101480的更多相关文章

随机推荐

  1. Windows 10下Xilinx ISE需要注意的事项。

    一是安装.可以在Windows 10下安装Xilinx ISE 14.7. 详见:https://www.eevblog.com/forum/xilinx/guide-getting-xilinx-i ...

  2. [golang][gui]Hands On GUI Application Development in Go【在Go中动手进行GUI应用程序开发】读书笔记03-拒交“智商税”,解密“GUI”运行之道

    和老外的原文好像没多大联系了,哈哈哈,反正是读书笔记,下面的内容也是我读此书中的历程,也写进来吧.不过说实话,这框架的作者还挺对我脾气的,哈哈哈. 拒交“智商税”,解密“GUI”运行之道 我很忙 项目 ...

  3. Linux下查看文件和文件夹大小 删除日志

    场景:在sts中执行自动部署时候maven提示No space left on device错误,后来经检查发现是磁盘空间满了,用下面的方法分析发现tomcat下面的logs目录占用了很大的空间,删除 ...

  4. SSM 实现支付宝支付功能(图文详解+完整代码)

    阅读本文大概需要 4 分钟. 前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能.本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释, ...

  5. OpenGL的核心模式与立即渲染模式

    早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管线),这个模式下绘制图形很方便.OpenGL的大多数功能都被库隐藏起来,开发者很少能控制OpenGL如何进行计算的自由 ...

  6. buddo源码分析-transport组件之Netty(一)

    dubbo 2.5.10 版本,netty仍然使用的是netty的3.10.5版本,我们从下面的代码可以看出,SPI默认使用的是“netty”,而不是“netty4”. package com.ali ...

  7. SyntaxError: expected expression, got ")" void() : 1: 5

    这个错误的意思是: 本来希望得到 一个 表达式, 缺得到了 ), 凡是 这样的错误, 就是 函数 在当前位置, 需要一个参数! 参数没有给, 就 输入 ) 右括号了! 错误位置 1: 5, 就是 指 ...

  8. linux 压缩、解压、zip/unzip/jar

    网上很多人说用jar命令解压,但jar命令解压时不能指定目录,推荐使用unzip解压war包. unzip -d 指定目录 [root@oracle upload]# unzip -oq common ...

  9. Java类成员初始化顺序

    类中包含7中成员:1.静态变量 static2.final静态常量 final static3.静态代码块 static{}  //多个代码块顺序执行 4.普通变量5.普通代码块 {}  //多个代码 ...

  10. Ubuntu 上编译opencv_contrib模块for Android

    https://blog.csdn.net/ipfpm/article/details/81132144 [ubuntu]Ubuntu中Android SDK下载跟配置 android24的版本 (1 ...