中考结束了嘛
然后由于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