【短期】文化课后的康复训练
中考结束了嘛
然后由于D萎蛋了 所以前期是上午OI下午文化课晚上作业 提前把高一知识搞完这样停课比较稳
这几天先是简单题的康复训练 NOIP提高难度吧 然后中间穿插一些之前想补的题
嗯就这样,开始吧。
6.17
做了一下下面的小朋友【大雾 的题 还是很好做的嘛233
poj2437
有点辣鸡的贪心题 贪就完事了 处理边界有点麻烦
//Love and Freedom. #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #define ll long long #define inf 20021225 using namespace std; struct mud { int st,ed; bool operator<(const mud &x) { return st<x.st; } }m[10010]; int n,l; int main() { scanf("%d%d",&n,&l); for(int i=1;i<=n;i++) scanf("%d%d",&m[i].st,&m[i].ed); sort(m+1,m+n+1); int ans=0,lst=0; for(int i=1;i<=n;i++) { int tmp=max(lst,m[i].st);// printf("%d\n",tmp); int len=m[i].ed-tmp; if(len<=0) continue; len=(len-1)/l+1; ans+=len; lst=tmp+len*l; } printf("%d\n",ans); return 0; }
bzoj1614
比较好做的题 简化题意就是求路径上第(k+1)大最小
这种什么最大最小二分就很靠谱 然后spfa更新个dp数组就好啦
//Love and Freedom. #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<queue> #define ll long long #define inf 20021225 #define N 10001 #define MX 1000001 using namespace std; struct edge{int to,lt,v;}e[N<<1]; int in[N],f[N],cnt,n,p,k; void add(int x,int y,int v) { e[++cnt].to=y; e[cnt].lt=in[x]; e[cnt].v=v; in[x]=cnt; e[++cnt].to=x; e[cnt].lt=in[y]; e[cnt].v=v; in[y]=cnt; } queue<int> q; bool spfa(int t) { //while(!q.empty()) q.pop(); memset(f,48,sizeof(f)); q.push(1); f[1]=0; while(!q.empty()) { int x=q.front(); q.pop(); for(int i=in[x];i;i=e[i].lt) { int y=e[i].to,tmp=f[x]; if(e[i].v>t) tmp++; if(tmp<f[y]) f[y]=tmp,q.push(y); } } if(f[n]<=k) return 1; return 0; } int main() { int x,y,v; scanf("%d%d%d",&n,&p,&k); for(int i=1;i<=p;i++) scanf("%d%d%d",&x,&y,&v),add(x,y,v); int l=0,r=MX,mid; int ans=MX; while(l<=r) { mid=l+r>>1; if(spfa(mid)) ans=min(ans,mid),r=mid-1; else l=mid+1; } if(ans==MX) ans=-1; printf("%d\n",ans); return 0; }
ATC034A 放在长期计划了
LOJ6435 PKUSC2018 星际穿越
在这里->戳我
6.18
emm感觉康复训练好像不是很适合 还是直接学东西 和 写代码恢复比较快 然后就是写题和学新算法同时进行吧
写的神仙的游戏 具体见这里->戳我
再就是学了2-SAT和线段树优化建图 都是好理解的东西 今天写写题√ 【洛谷任务计划里堆了一堆QAQ
6.19
线段树优化建图w!CF1045A 戳我
6.20
太颓了 搭博客去了
然后写了个板子 CF768B 戳我
6.21
太颓了 学了个2sat
写了下洛谷模板 深刻的认识到了自己的语文问题 再写了CF27D 不想写题解了 把代码扔这里了
//Love and Freedom. #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<stack> #define tr(x) (x<<1) #define fs(x) ((x<<1)|1) #define ll long long #define inf 20021225 #define N 2000100 using namespace std; int n,m; struct edge{int to,lt;}e[N]; int col[N],c,vc[N],opp[N]; int in[N],cnt,dfn[N],low[N],poi,tag[N]; bool vis[N]; stack<int> st; void add(int x,int y) { e[++cnt].to=y; e[cnt].lt=in[x]; in[x]=cnt; } void tarjan(int x) { low[x]=dfn[x]=++poi; st.push(x); vis[x]=1; for(int i=in[x];i;i=e[i].lt) { int y=e[i].to; if(vis[y]) low[x]=min(low[x],dfn[y]); else if(!dfn[y]) tarjan(y),low[x]=min(low[x],low[y]); } if(low[x]==dfn[x]) { ++c; int w,s=0; do { w=st.top(); st.pop(); col[w]=c; s++; vis[w]=0; }while(w!=x); vc[c]=s; } } void work() { for(int i=1;i<=n;i++) { if(!dfn[tr(i)]) tarjan(tr(i)); if(!dfn[fs(i)]) tarjan(fs(i)); if(col[tr(i)]==col[fs(i)]) { printf("IMPOSSIBLE\n"); return; } } for(int i=1;i<=n;i++) opp[col[tr(i)]]=col[fs(i)], opp[col[fs(i)]]=col[tr(i)]; for(int i=1;i<=c;i++) if(!tag[i]) tag[i]=1,tag[opp[i]]=-1; printf("POSSIBLE\n"); for(int i=1;i<=n;i++) printf("%d ",tag[col[tr(i)]]==1?1:0); printf("\n"); } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int x,y,ax,ay; scanf("%d%d%d%d",&x,&ax,&y,&ay); x=ax?tr(x):fs(x); y=ay?tr(y):fs(y); add(x^1,y); add(y^1,x); } work(); return 0; }
//Love and Freedom. #include<cstdio> #include<cmath> #include<algorithm> #include<stack> #include<cstring> #define ll long long #define inf 20021225 #define tr(x) (x<<1) #define fs(x) (x<<1|1) #define N 200010 using namespace std; struct edge{int to,lt;}e[N]; int col[N],c,dfn[N],low[N],poi,n,m; bool vis[N]; int in[N],cnt,opp[N],tag[N]; stack<int> st; int p[N][2]; void add(int x,int y){e[++cnt].to=y; e[cnt].lt=in[x]; in[x]=cnt;} void tarjan(int x) { dfn[x]=low[x]=++poi; vis[x]=1; st.push(x); for(int i=in[x];i;i=e[i].lt) { int y=e[i].to; if(vis[y]) low[x]=min(low[x],dfn[y]); else if(!dfn[y]) tarjan(y), low[y]=min(low[x],low[y]); } if(low[x]==dfn[x]) { ++c; int w; do { w=st.top(); st.pop(); col[w]=c; vis[w]=0; }while(w!=x); } } bool left(int ax,int ay,int x) { if(ax>ay) swap(ax,ay); return (x<ax)|(x>ay); } bool check(int ax,int ay,int bx,int by) { if(bx==ax||bx==ay||by==ax||by==ay) return 0; if(left(ax,ay,bx)^left(ax,ay,by)) return 1; return 0; } void work() { for(int i=1;i<=m;i++) { if(!dfn[tr(i)]) tarjan(tr(i)); if(!dfn[fs(i)]) tarjan(fs(i)); if(col[tr(i)]==col[fs(i)]) { printf("Impossible\n"); return; } } for(int i=1;i<=m;i++) opp[col[tr(i)]]=col[fs(i)],opp[col[fs(i)]]=col[tr(i)]; for(int i=1;i<=c;i++) if(!tag[i]) tag[i]=1,tag[opp[i]]=-1; for(int i=1;i<=m;i++) printf("%c",tag[col[tr(i)]]==1?'i':'o'); } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d%d",&p[i][0],&p[i][1]); for(int j=1;j<i;j++) { //if(j==1 && i==2) printf("%d\n",check(p[i][0],p[i][1],p[j][0],p[j][1])); if(check(p[i][0],p[i][1],p[j][0],p[j][1])) add(tr(i),fs(j)),add(fs(j),tr(i)), add(tr(j),fs(i)),add(fs(i),tr(j)); } } work(); return 0; }
6.22
今天上午休息 下午还是文化课
晚上准备打ABC131恢复下手速 然后写完可能继续做atc泛做
6.23
昨晚abc在wph和scb的帮助下顺利阿克啦 他俩都太神仙了w
白天出去玩了www 蹦床好好玩的说
晚上回来写了个看起来很计数的题agc028B 放在atc泛做里了
感觉有时候看起来不可做的话 可以试试强推式子...
以及不行可以把计数转期望... 但感觉这对我来说好像有点困难... 推大柿子也不会期望的... 这辈子不会期望的【大雾
这样看看计数能力还是有点提升的QAQ
6.24
写了两个题 都不是很难 link 还有一个在atcoder泛做里面
看了一下sun做了不少字符串 自己字符串也不是很好 可能接下来几天 跟着sun做题了233
6.25
做了一道神仙题 link sro sun orz
6.26
又做了一道神仙题 link sro sun orz
6.27
还是神仙题 link sro bestfy orz
6.28
一道小朋友们的题 link
一道水期望 嘤嘤嘤还是好菜啊
//Love and Freedom. #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #define ll long long #define inf 20021225 #define N 10001 #define db double using namespace std; db f[N],g[N];int n; int main() { scanf("%d",&n); for(int i=n-1;~i;i--) f[i]=f[i+1]+(db)n/(n-i); for(int i=n-1;~i;i--) g[i]=f[i]*i/(n-i)+f[i+1]+g[i+1]+(db)n/(n-i); printf("%.2lf\n",g[0]); return 0; }
然后做了一道APIO的水题
//Love and Freedom. #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #define ll long long #define inf 20021225 #define N 2000010 using namespace std; ll gcd(ll x,ll y){return !y?x:gcd(y,x%y);} struct sgt{ll l,r;}s[N]; bool cmp(sgt a,sgt b){return a.l==b.l?a.r<b.r:a.l<b.l;} ll merge(int n) { ll mx=-1,lf=-1,ans=0; for(int i=1;i<=n;i++) { mx=s[i].r,lf=s[i].l; while(s[i].l<=mx && i<=n) mx=max(mx,s[i].r),i++; i--; ans+=mx-lf+1; } return ans; } int main() { int n,nn; ll A,B,S; scanf("%d%lld%lld",&n,&A,&B); nn=n; S=A*B/gcd((A-B-1)%A+A,A); ll ans=0;; for(int i=1;i<=n;i++) { scanf("%lld%lld",&s[i].l,&s[i].r); int tmp=s[i].l==s[i].r; if(s[i].r-s[i].l>=S) ans=S; s[i].l%=S,s[i].r%=S; if(!tmp && s[i].l>=s[i].r) s[++nn].l=0,s[nn].r=s[i].r,s[i].r=S-1; } n=nn; if(ans==S){printf("%lld\n",ans); return 0;} sort(s+1,s+n+1,cmp); //for(int i=1;i<=n;i++) printf("%lld %lld\n",s[i].l,s[i].r); printf("%lld\n",merge(n)); return 0; }
然后这个博客就停更啦 因为要正式开始OI啦