真·告别OI选手。
day-1
jz模拟赛只有200,拍到13名,而且前几天感觉状态不是很好,模拟赛一天比一天低,rp++。而我身边的ymw大佬已经开始复习LCT的板纸了,ORZORZ,而且感觉自己好颓啊,写了下历年GDOI的DP题然后就没有然后了
day0
学校校运会,然后看了一个上午的比赛,妈呀我们班居然拿了辣么多单项第一。。。。rp--
下午出发去了广州二中科学城,还是上一次的paco酒店,还是熟悉的房间,熟悉的沐浴露和洗发露嘿嘿嘿。。。晚上和pipi,didi,ymw跑去吃寿司,还是我选的,结果份量特别少,rp--,只好去MC补了点汉堡辣翅啥的。然后就滚去(~﹃~)~zZ了
day1
早上因为昨晚吃的上火的东西肚子爆炸了,呜好痛%>_<%,然后刚开始比赛就又滚去上了一次厕所= =
上完厕所回来看了下T2T3,woc什么鬼= =T2转化下变成维护区间中有多少个b,然后就变成链剖+主席树= =T3概率DP是闹啥样啊
码码码然后发现T2会炸的很惨,代码量又大,弃疗T2,开始推T3的DP,写了下感觉没啥问题,然后开始码码码,距离比赛结束还有40分钟,嗯发现自己的方程是有问题的。一脸崩溃怒写60分暴力,发现式子还要重新推= =,算了24分走人= =
下午听栋爷说线段树合并就nlogn了,claris说可以O(n)= =,然后问了下萌萌哒的NiroBC(泥揉BC),发现把dep加上或减去就变成了常数,然后就变成单点插入和单点查询,然后直接dfs就O(n)了= =
T3一看发现自己把min写成了+,于是T3又爆炸了= =
晚上居然跑去吃了川菜= =,然后被安利下载了球球大作战,然后四个zz就开黑了嘿嘿嘿
晚上睡觉时心想再这么下去真的就狗带了啊day2不翻盘就真的狗带了
顺便orz今天的mogician和mengbier2333333333
day2
早上起床发现忘记买水,然后一个上午都没喝水,rp--
T1明显随便搞,T2= =woc跳蚤国王是想闹哪样啊喂T3一看n只有18明显可做很多
然后开码了T3,大概还有1.5h的时候三个样例都过掉了,第三个用时不到 0.01s,感觉自己爆搜+最优化剪枝的东西很强势嘛,【事后刘翰之大神讲了这东西的复杂度是m^2*2^m的】,T2想了下直接上线段树了,60分滚粗
结果一出考场发现T2就是一个合并果子的模型,那题我曾经还写过三个队列的做法的= =
不过myy居然没有yy出T2的做法嘿嘿嘿
自己的整个OI生涯感觉就都是从高一结束才开始,然后冲了一波省选,然后狗带退役.虽然自己从小学就开始学了,然而初中三年竟然跑去搞田径= =,高一天天腐败,结果高二省选day1竟然神使鬼差的只有10分,即使day2有160也无济于事了.
感觉自己在yali集训时认识了好多dalao啊,还有JZ的各位,最后ORZORZ一波吧
最后祝愿ymw【杨明伟】,wzd【王之栋】,wyx【王宇轩】,NiroBC【萌萌哒的学妹】能绽放自己的光彩吧嗯嗯嗯
还有就是感谢姜老师嗯
出成绩之前,我们高三竟然双休回家了= =,然后向广铁的dalao要到了程序【其实是因为自己老师出门了身边暂时没电脑】
luogu数据是100+25+68+70+60+95= =
day2t1忘记了组合数加起来会炸longlong,然后改了下加了个取膜就过了= =
day1t3居然拿到了神奇的部分分。
day2t3竟然被卡了常数= =
UP一下代码做个留恋吧
记得不是正确的代码哦,交了不能AC的
day1t1
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define DB double
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define efo(i,x) for(int i=last[x];i!=0;i=e[i].next)
#define filein(x) freopen(#x".in","r",stdin)
#define fileout(x) freopen(#x".out","w",stdout)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define ENT putchar('\n')
#define PAU putchar(' ')
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
const int N = 1e5 + 15555;
const int M = 15;
int a[N];
char s[N][M];
int n,m;
int now=1;
int check(int k,int op,int x) {
int ret=k,tmp=a[k]?x:-x;
if(op==0) op--;
tmp=-tmp*op;
ret+=tmp;
while(ret<=0) ret+=n;
while(ret>n) ret-=n;
return ret;
}
int main() {
file(toy);
scanf("%d%d",&n,&m);
fo(i,1,n) scanf("%d%s",&a[i],s[i]);
fo(i,1,m) {
int op,x; scanf("%d%d",&op,&x);
now=check(now,op,x);
// cerr<
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define DB double
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define efo(i,x) for(int i=last[x];i!=0;i=e[i].next)
#define filein(x) freopen(#x".in","r",stdin)
#define fileout(x) freopen(#x".out","w",stdout)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define ENT putchar('\n')
#define PAU putchar(' ')
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
const int N = 300000 + 15555;
struct edge {
int y,next;
}e[N*2];
int last[N],ne=0;
int S[N],T[N],w[N];
int dep[N],fa[N],siz[N],top[N],son[N],be[N],en[N],cnt=0;
int ans[N];
int n,m;
bool flag1=1,flag2=1;
void add(int x,int y) {
e[++ne].y=y; e[ne].next=last[x]; last[x]=ne;
}
void add2(int x,int y) { add(x,y); add(y,x); }
void init() {
n=read(); m=read();
fo(i,1,n-1) {
int x=read(),y=read();
add2(x,y);
}
fo(i,1,n) w[i]=read();
fo(i,1,m) {
S[i]=read(),T[i]=read();
if(S[i]!=1) flag1=0;
if(T[i]!=1) flag2=0;
}
}
void dfs1(int x,int pre) { int ma=0,f=0;
fa[x]=pre; siz[x]=1; be[x]=++cnt;
efo(i,x) if(e[i].y!=pre) {
dep[e[i].y]=dep[x]+1;
dfs1(e[i].y,x);
siz[x]+=siz[e[i].y];
if(siz[e[i].y]>ma) ma=siz[e[i].y],f=e[i].y;
}
son[x]=f; en[x]=cnt;
}
void dfs2(int x,int Top) {
top[x]=Top;
if(son[x]) dfs2(son[x],Top);
efo(i,x) if(e[i].y!=son[x]&&e[i].y!=fa[x]) {
dfs2(e[i].y,e[i].y);
}
}
int LCA(int x,int y) {
while(top[x]!=top[y]) {
if(dep[top[x]]
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define DB double
#define clr(a,b) memset(a,b,sizeof(a))
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define efo(i,x) for(int i=last[x];i!=0;i=e[i].next)
#define filein(x) freopen(#x".in","r",stdin)
#define fileout(x) freopen(#x".out","w",stdout)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define ENT putchar('\n')
#define PAU putchar(' ')
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
const int N = 300 + 15;
const int M = 2000 + 15;
const int inf = 2000000000;
int G[N][N];
int c[M],d[M];
DB K[M];
//DB f[M][2][M];
int n,m,V,E;
bool flag2=1;
void init() { clr(G,127/2);
scanf("%d%d%d%d",&n,&m,&V,&E);
fo(i,1,n) scanf("%d",&c[i]);
fo(i,1,n) scanf("%d",&d[i]);
fo(i,1,n) {
scanf("%lf",&K[i]);
if(K[i]<1) flag2=0;
}
fo(i,1,E) {
int x,y,z; scanf("%d%d%d",&x,&y,&z);
G[x][y]=G[y][x]=min(G[x][y],z);
}
}
/*
void work() { clr(f,0);
fo(k,1,V) fo(i,1,V) fo(j,1,V) if(k!=i&&i!=j&&k!=j) {
G[i][j]=min(G[i][j],G[i][k]+G[k][j]);
}
fo(i,1,V) G[i][i]=0;
fo(i,2,n) {
f[i][0][0]=f[i-1][0][0]+G[c[i-1]][c[i]];
fo(j,1,m) {
f[i][0][j]=(DB)f[i-1][0][j]+f[i-1][1][j]+(f[i-1][0][j-1]+f[i-1][1][j-1])*(1-K[i]);
f[i][1][j]=(DB)(f[i-1][0][j-1]+f[i-1][1][j-1])*K[i];
f[i][0][j]+=(DB)G[c[i-1]][c[i]]*(2-K[i])+G[d[i-1]][c[i]]*(2-K[i]);
f[i][1][j]+=(DB)G[c[i-1]][d[i]]*K[i]+G[d[i-1]][d[i]]*K[i];
cerr<m) return ;
if(x>n) {
// fo(i,1,n) cerr<
day2t1 QAQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
这是改了下AC了的代码
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define DB double
#define LB long double
#define clr(a,b) memset(a,b,sizeof(a))
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define efo(i,x) for(int i=last[x];i!=0;i=e[i].next)
#define filein(x) freopen(#x".in","r",stdin)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define remax(a,b) a=max(a,b)
#define remin(a,b) a=min(a,b)
#define ENT putchar('\n')
#define PAU putchar(' ')
#define MID ((l+r)>>1)
#define lch (k<<1)
#define rch (k<<1|1)
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
const int N = 2000 + 155;
const int MAX = 2000;
LL f[N][N];
bool g[N][N];
int sum[N][N];
LL n,m,T,K;
void init() { clr(f,-1);
T=read(),K=read();
fo(i,1,MAX) f[i][0]=1;
fo(i,1,MAX) fo(j,1,min(i-1,MAX)) {
f[i][j]=max(f[i-1][j],0LL)+max(f[i-1][j-1],0LL);
f[i][j]%=K;
// if(f[i][j]%K) f[i][j]%=K;
}
fo(i,0,MAX) fo(j,0,MAX) if(f[i][j]>=0&&f[i][j]%K==0) g[i][j]=1;
}
void work() {
fo(i,0,MAX) { sum[0][i]=0;
fo(j,0,MAX) sum[j][i]=sum[j-1][i]+g[j][i];
}
/*
fo(i,1,7) { cerr<
day2t2
#include
#include
#include
#include
#include
#include
#define LL long long
#define DB double
#define LB long double
#define clr(a,b) memset(a,b,sizeof(a))
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define efo(i,x) for(int i=last[x];i!=0;i=e[i].next)
#define filein(x) freopen(#x".in","r",stdin)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define remax(a,b) a=max(a,b)
#define remin(a,b) a=min(a,b)
#define ENT putchar('\n')
#define PAU putchar(' ')
#define MID ((l+r)>>1)
#define lch (k<<1)
#define rch (k<<1|1)
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
const int N = 150000 + 15555;
const int M = 150000 + 15555;
const int NM = N + M;
LL a[NM],mx[NM<<2],b[NM<<2],lz[NM<<2],w[NM];
int n,m,q,u,v,t;
void init() {
n=read(),m=read(),q=read(),u=read(),v=read(),t=read();
fo(i,1,n) a[i]=read();
fo(i,n+1,n+m) a[i]=0;
}
void pushup(int k) {
if(mx[lch]>mx[rch]) {
mx[k]=mx[lch]; b[k]=b[lch];
}else {
mx[k]=mx[rch]; b[k]=b[rch];
}
}
void pushlazy(int k) {
mx[lch]+=lz[k]; mx[rch]+=lz[k];
lz[lch]+=lz[k]; lz[rch]+=lz[k];
lz[k]=0;
}
void buildsegtree(int k,int l,int r) {
if(l==r) {
mx[k]=a[l];
b[k]=l;
lz[k]=0;
return ;
}
int mid=MID;
buildsegtree(lch,l,mid); buildsegtree(rch,mid+1,r);
pushup(k);
}
void Change(int k,int l,int r,int pos,LL val) {
if(l==r) {
mx[k]=val;
return ;
}
if(lz[k]) pushlazy(k);
int mid=MID;
if(pos<=mid) Change(lch,l,mid,pos,val); else Change(rch,mid+1,r,pos,val);
pushup(k);
}
LL Geta(int k,int l,int r,int pos) {
if(l==r) return mx[k];
if(lz[k]) pushlazy(k);
int mid=MID;
if(pos<=mid) return Geta(lch,l,mid,pos); else return Geta(rch,mid+1,r,pos);
}
void Add(int k,int l,int r,int ll,int rr,LL val) {
if(rrmid) Add(rch,mid+1,r,ll,rr,val);
else Add(lch,l,mid,ll,mid,val),Add(rch,mid+1,r,mid+1,rr,val);
}
pushup(k);
}
bool cmp(LL a,LL b) { return a>b; }
void work() { int nu=0;
buildsegtree(1,1,n+m);
fo(i,1,m) {
int p=b[1]; LL valu=mx[1];
LL l1=(DB)u/v*valu,l2=valu-l1;
Change(1,1,n+m,p,l1); Change(1,1,n+m,++nu+n,l2);
if(q!=0) Add(1,1,n+m,1,p-1,q),Add(1,1,n+m,p+1,nu+n-1,q);
if(nu%t==0) printf("%lld ",valu);
} ENT;
fo(i,1,n+m) w[i]=Geta(1,1,n+m,i);
sort(w+1,w+n+m+1,cmp);
fo(i,1,n+m) if(i%t==0) printf("%lld ",w[i]);
}
int main() {
file(earthworm);
init();
work();
return 0;
}
day2t3 = =
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define DB double
#define LB long double
#define clr(a,b) memset(a,b,sizeof(a))
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define efo(i,x) for(int i=last[x];i!=0;i=e[i].next)
#define filein(x) freopen(#x".in","r",stdin)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define remax(a,b) a=max(a,b)
#define remin(a,b) a=min(a,b)
#define ENT putchar('\n')
#define PAU putchar(' ')
#define MID ((l+r)>>1)
#define lch (k<<1)
#define rch (k<<1|1)
using namespace std;
inline LL read() {
LL d=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
return d*f;
}
const int N = 20;
const DB eps = 1e-6;
struct point {
DB x,y;
}p[N];
int n,m;
int ans,anss;
int v[N];
void init() {
scanf("%d%d",&n,&m);
fo(i,1,n) scanf("%lf%lf",&p[i].x,&p[i].y);
}
DB Cala(int x,int y) {
DB x1=p[x].x,y1=p[x].y;
DB x0=p[y].x,y0=p[y].y;
DB k=(DB)x0/x1;
DB tmp1=k*y1-y0,tmp2=k*x1*x1-x0*x0;
if(tmp2==0) return 1;
DB ret=tmp1/tmp2;
if(ret>0) return 1;
return ret;
}
DB Calb(int x,int y) {
DB x1=p[x].x,y1=p[x].y;
DB x0=p[y].x,y0=p[y].y;
DB k=(DB)(x0*x0)/(x1*x1);
DB tmp1=y1*k-y0,tmp2=x1*k-x0;
return tmp1/tmp2;
}
bool check(DB a,DB b,int k) {
DB ret=(DB)a*p[k].x*p[k].x+(DB)b*p[k].x;
if(fabs(ret-p[k].y)<=eps) return 1;
return 0;
}
void dfs(int x) {
if(x>n) {
ans=anss;
return ;
}
if(v[x]) dfs(x+1);
else {
if(anss+1>=ans) return ;
v[x]=++anss;
fo(i,x+1,n) if(v[i]==0) {
DB a=Cala(x,i),b=Calb(x,i);
if(a>=0) continue;
v[i]=anss;
fo(j,i+1,n) if(i!=j&&check(a,b,j)) v[j]=anss;
dfs(x+1);
fo(j,i+1,n) if(v[j]==anss) v[j]=0;
v[i]=0;
}
dfs(x+1);
v[x]=0; anss--;
}
}
void work() { clr(v,0);
ans=n; //if(n&1) ans++;
if(m==1) { ans=n/3+1; if(n%3) ans++; }
anss=0; dfs(1);
printf("%d\n",ans); //cerr<