#include<cstdio>#include<iostream>#include<vector>#include<array>#include<algorithm>#define RI register int#define CI const int&usingnamespace std;
constint N=105,dx[4]={0,2,0,-2},dy[4]={2,0,-2,0};
int n,m,vis[N*N],match[N*N],x[N*N],y[N*N]; char s[N][N];
vector <int> A,B; vector <array <int,3>> v[N*N];
inlineintID(CI x,CI y){
return (x-1)*(2*m-1)+y;
}
inlinevoidaddedge(int a,int b,int c,int d,CI e,CI f){
if (!(s[a][b]=='2'||s[a][b]=='4'||s[a][b]=='7')) return;
if (!(s[c][d]=='2'||s[c][d]=='4'||s[c][d]=='7')) return;
if (((a+b)/2)%2) swap(a,c),swap(b,d);
v[ID(a,b)].push_back({ID(c,d),e,f});
}
inlineboolfind(CI now,CI idx){
for (auto [to,ex,ey]:v[now])
if (vis[to]!=idx)
{
vis[to]=idx;
if (!match[to]||find(match[to],idx))
return match[to]=now,x[to]=ex,y[to]=ey,1;
}
return0;
}
intmain(){
RI i,j,k; scanf("%d%d",&n,&m);
for (i=1;i<=2*n-1;++i) scanf("%s",s[i]+1);
for (i=1;i<=2*n-1;i+=2) for (j=1;j<=2*m-1;j+=2)
{
if (!(s[i][j]=='2'||s[i][j]=='4'||s[i][j]=='7')) continue;
if (((i+j)/2)%2) B.push_back(ID(i,j)); else A.push_back(ID(i,j));
}
for (i=1;i+2<=2*n-1;i+=2) addedge(i,1,i+2,1,i+1,1),addedge(i,2*m-1,i+2,2*m-1,i+1,2*m-1);
for (j=1;j+2<=2*m-1;j+=2) addedge(1,j,1,j+2,1,j+1),addedge(2*n-1,j,2*n-1,j+2,2*n-1,j+1);
for (i=3;i<=2*n-3;i+=2) for (j=3;j<=2*m-3;j+=2)
{
if (!(s[i][j]=='2'||s[i][j]=='4'||s[i][j]=='7')) continue;
for (k=0;k<4;++k)
{
int ii=i+dx[k],jj=j+dy[k];
if (ii<3||ii>2*n-3||jj<3||jj>2*m-3) continue;
if (!(s[ii][jj]=='2'||s[ii][jj]=='4'||s[ii][jj]=='7')) continue;
addedge(i,j,ii,jj,(i+ii)/2,(j+jj)/2);
}
}
//sort(A.begin(),A.end()); A.erase(unique(A.begin(),A.end()),A.end());//sort(B.begin(),B.end()); B.erase(unique(B.begin(),B.end()),B.end());if (A.size()!=B.size()) returnputs("NO"),0;
int ret=0,cnt=0; for (auto v:A) ret+=find(v,++cnt);
if (ret!=A.size()) returnputs("NO"),0;
for (auto v:B) s[x[v]][y[v]]='#';
for (puts("YES"),i=1;i<=2*n-1;++i,putchar('\n'))
for (j=1;j<=2*m-1;++j)
{
char ch=s[i][j];
if (ch=='.') ch='#'; elseif (ch=='#') ch='.';
putchar(ch);
}
return0;
}
#include<cstdio>#include<iostream>#include<vector>#include<cmath>#define RI register int#define CI const int&usingnamespace std;
constint N=200005;
int t,n,p,x,a[N],ans[N];
inlineintquick_pow(int x,int mod,int p,int mul=1){
for (;p;p>>=1,x=1LL*x*x%mod) if (p&1) mul=1LL*mul*x%mod; return mul;
}
intmain(){
//freopen("F.in","r",stdin);for (scanf("%d",&t);t;--t)
{
RI i,c; for (scanf("%d%d",&n,&p),i=0;i<p;++i) a[i]=0;
for (i=1;i<=n;++i) scanf("%d",&x),a[x]=1;
if (!a[0]) { puts("1 1\n0"); continue; } else ans[0]=1;
if (p-n<=(int)sqrt(p))
{
vector <int> vec;
for (i=0;i<p;++i) if (!a[i]) vec.push_back(i);
for (c=1;c<p;++c)
{
int mex=p;
for (auto x:vec) mex=min(mex,(int)(1LL*c*x%p));
ans[c]=mex;
}
} else {
for (c=1;c<p;++c)
{
int mex=1,inv=quick_pow(c,p,p-2);
while (a[1LL*mex*inv%p]) ++mex;
ans[c]=mex;
}
}
int mx=0; vector <int> num;
for (i=0;i<p;++i) mx=max(mx,ans[i]);
for (i=0;i<p;++i) if (ans[i]==mx) num.push_back(i);
printf("%d %d\n",num.size(),mx);
for (auto x:num) printf("%d ",x); putchar('\n');
}
return0;
}
7|0H. Classic: N Real DNA Pots
开场看了一眼就会了,感觉还是很自然的
考虑二分答案 s,检验的话我们先讲所有点按照横坐标排序
考虑对于 i<j,合法的条件为 yj−yixj−xi≥s,即 yj−s×xj≥yi−s×xi
因此按照 yi−s×xi 的值做一个最长上升子序列即可,总复杂度 O(nlognlog1ϵ)
#include<cstdio>#include<iostream>#include<algorithm>#include<utility>#define RI register int#define CI const int&#define fi first#define se secondusingnamespace std;
typedeflongdouble LDB;
typedef pair <int,int> pi;
constint N=100005;
const LDB EPS=1e-9;
int n,m,k,a[N]; pi p[N]; LDB val[N],rst[N];
classTree_Array{
private:
int bit[N];
public:
#define lowbit(x) (x&-x)inlinevoidinit(void){
for (RI i=0;i<=m;++i) bit[i]=0;
}
inlineintget(RI x,int ret=0){
for (;x;x-=lowbit(x)) ret=max(ret,bit[x]); return ret;
}
inlinevoidadd(RI x,CI y){
for (;x<=m;x+=lowbit(x)) bit[x]=max(bit[x],y);
}
#undef lowbit}BIT;
inlineintcheck(const LDB& slp){
RI i; for (i=1;i<=n;++i)
val[i]=rst[i]=1.0L*p[i].se-slp*p[i].fi;
sort(rst+1,rst+n+1);
m=unique(rst+1,rst+n+1)-rst-1; int ret=0;
for (BIT.init(),i=1;i<=n;++i)
{
int tmp=lower_bound(rst+1,rst+m+1,val[i])-rst;
int cur=BIT.get(tmp)+1; ret=max(ret,cur); BIT.add(tmp,cur);
}
return ret;
}
intmain(){
RI i; for (scanf("%d%d",&n,&k),i=1;i<=n;++i)
scanf("%d%d",&p[i].fi,&p[i].se); sort(p+1,p+n+1);
LDB l=-1e9,r=1e9,mid;
while (r-l>EPS)
{
mid=(l+r)/2.0;
if (check(mid)>=k) l=mid; else r=mid;
}
returnprintf("%.8Lf",l),0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2023-07-10 UESTC 2023 Summer Training #01 Div.2