NOIp2018集训test-9-21(am/pm)
Am DAY1
抄代码
送分题
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=;
using namespace std;
typedef long long LL;
typedef double db;
char a[N],b[N];
int T,n,m,to[]; template<typename T>void read(T &x) {
T f=; x=; char ch=getchar();
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} void get(char a[],int &len) {
len=; char ch=getchar();
if(ch!=';'&&(ch<''||ch>'')&&(ch<'a'||ch>'z')&&ch!=' ') ch=getchar();
for(;ch!='\n'&&ch!='\t';ch=getchar()) a[len++]=ch;
} #define ANS
int main() {
#ifdef ANS
freopen("copycat.in","r",stdin);
freopen("copycat.out","w",stdout);
#endif
read(T);
while(T--) {
memset(to,,sizeof(to));
get(a,n);
get(b,m);
if(n!=m) puts("");
else {
int ans=;
For(i,,n-) {
if(a[i]>='a'&&a[i]<='z'&&b[i]>='a'&&b[i]<='z') {
if(!to[a[i]]) to[a[i]]=b[i];
else if(to[a[i]]!=b[i]) { ans=; break; }
}
else if(a[i]!=b[i]) { ans=; break; }
}
printf("%d\n",ans);
}
}
//cerr<<clock()<<endl;
Formylove;
}
做运动
本来也是送分题但是我被自己蠢哭了。。
二分明显随便做,但是显然这题卡二分,那么按边权从小到大枚举连边,并查集维护连通性,s和t联通后跑一遍dijkstra就出答案了,然而我蠢到用spfa去判断联通,我到底脑子里到底在想什么???
事实是除了费用流和判负环spfa真的没有任何其他用途了,不要写spfa不要写spfa觉得要写spfa你一定是傻了!
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=1e6+;
using namespace std;
typedef long long LL;
typedef double db;
int n,m,S,T;
LL anst,ansc; template<typename T>void read(T &x) {
T f=; x=; char ch=getchar();
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int fa[N];
int find(int x) { return x==fa[x]?x:fa[x]=find(fa[x]); } int ecnt,fir[N],nxt[N<<],to[N<<];
LL val[N<<],d[N],inf;
void add(int u,int v,LL w) {
nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v; val[ecnt]=w;
nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u; val[ecnt]=w;
} struct edge {
int u,v,c;
edge(int u,int v,int c):u(u),v(v),c(c){}
};
vector<edge>vc[]; int vis[N];
queue<int>que;
void spfa() {
d[S]=;
vis[S]=;
que.push(S);
while(!que.empty()) {
int x=que.front();
que.pop(); vis[x]=;
for(int i=fir[x];i;i=nxt[i]) if(d[to[i]]>d[x]+val[i]) {
d[to[i]]=d[x]+val[i];
if(!vis[to[i]]) {
vis[to[i]]=;
que.push(to[i]);
}
}
}
} #define ANS
int main() {
#ifdef ANS
freopen("running.in","r",stdin);
freopen("running.out","w",stdout);
#endif
read(n); read(m);
For(i,,m) {
int u,v,c,t;
read(u); read(v); read(t); read(c);
vc[t].push_back(edge(u,v,c));
}
read(S); read(T);
memset(d,/,sizeof(d));
inf=d[]; d[S]=;
For(i,,n) fa[i]=i;
For(t,,) {
int up=vc[t].size();
For(i,,up-) {
edge tp=vc[t][i];
LL w=(LL)tp.c*t;
add(tp.u,tp.v,w);
int x=find(tp.u),y=find(tp.v);
if(x!=y) fa[x]=y;
}
if(find(S)==find(T)) {
spfa();
anst=t; ansc=d[T];
break;
}
}
printf("%lld %lld\n",anst,ansc);
//cerr<<clock()<<endl;
Formylove;
}
大逃杀
树dp随便做。注意一下更新顺序就好。
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=;
using namespace std;
typedef long long LL;
typedef double db;
int n,T,w[N],t[N],ans,inf; template<typename T>void read(T &x) {
T f=; x=; char ch=getchar();
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int ecnt,fir[N],nxt[N<<],to[N<<],val[N<<];
void add(int u,int v,int w) {
nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v; val[ecnt]=w;
nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u; val[ecnt]=w;
} void get_max(int &x,int y,int z) {
if(y==inf||z==inf) return;
if(x<y+z) x=y+z; ans=max(ans,x);
} int f[N][N][];
void dfs(int x,int fa) {
f[x][t[x]][]=w[x];
f[x][t[x]][]=w[x];
f[x][t[x]][]=w[x];
for(int i=fir[x];i;i=nxt[i]) if(to[i]!=fa) {
dfs(to[i],x);
Rep(j,T,val[i]) {
int f0=f[x][j][],f1=f[x][j][],f2=f[x][j][];
For(k,,j-val[i]) {
if(j-k-*val[i]>=) {
get_max(f0,f[x][j-k-*val[i]][],f[to[i]][k][]);
get_max(f1,f[x][j-k-*val[i]][],f[to[i]][k][]);
get_max(f2,f[x][j-k-*val[i]][],f[to[i]][k][]); get_max(f2,f[x][j-k-*val[i]][],f[to[i]][k][]);
}
get_max(f1,f[x][j-k-val[i]][],f[to[i]][k][]);
get_max(f2,f[x][j-k-val[i]][],f[to[i]][k][]);
}
f[x][j][]=f0,f[x][j][]=f1,f[x][j][]=f2;
}
}
} #define ANS
int main() {
#ifdef ANS
freopen("toyuq.in","r",stdin);
freopen("toyuq.out","w",stdout);
#endif
read(n); read(T);
For(i,,n) read(w[i]);
For(i,,n) { read(t[i]); t[i]=min(t[i],T+); }
For(i,,n) {
int u,v,w;
read(u); read(v); read(w);
add(u,v,w);
}
memset(f,,sizeof(f));
inf=f[][][];
dfs(,);
printf("%d\n",ans);
//cerr<<clock()<<endl;
Formylove;
}
pm DAY2
非法输入
细心一点模拟即可。考虑清楚所有情况,注意如-0等。
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=1e6+;
using namespace std;
typedef long long LL;
typedef double db;
int T;
LL bs;
char s[N]; template<typename T>void read(T &x) {
T f=; x=; char ch=getchar();
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} void solve() {
int cnt=;
LL a=,b=,fl1=,fl2=;
char ch=getchar();
while(ch!='\n'&&ch!='\r') {
if(!cnt) {
if(ch=='-'||(ch>=''&&ch<='')) {
cnt++;
if(ch=='-') fl1=-;
else a=ch-'';
for(int i=;i;i++) {
ch=getchar();
if(ch==' '||ch=='\n'||ch=='\r') break;
if(ch<''||ch>'') cnt=;
else {
if((fl1==&&i==&&a==)||(fl1==-&&i==&&a==)) cnt=;
a=a*+ch-'';
if((fl1==&&a>=bs)||(fl1==-&&a>bs)) cnt=;
}
}
if(a==&&fl1==-) cnt=;
if(fl1==-) a=-a;
}
else cnt=;
}
else if(cnt==) {
if(ch=='-'||(ch>=''&&ch<='')) {
cnt++;
if(ch=='-') fl2=-;
else b=ch-'';
for(int i=;i;i++) {
ch=getchar();
if(ch=='\n'||ch=='\r') break;
if(ch<''||ch>'') cnt=;
else {
if((fl2==&&i==&&b==)||(fl2==-&&i==&&b==)) cnt=;
b=b*+ch-'';
if((fl2==&&b>=bs)||(fl2==-&&b>bs)) cnt=;
}
}
if(b==&&fl2==-) cnt=;
if(fl2==-) b=-b;
}
else cnt=;
}
if(ch=='\n'||ch=='\r') break;
ch=getchar();
}
if(cnt!=) puts("Input Error");
else printf("%lld\n",a+b);
} #define ANS
int main() {
#ifdef ANS
freopen("aplusb.in","r",stdin);
freopen("aplusb.out","w",stdout);
#endif
read(T);
bs=(1LL<<);
while(T--) {
solve();
}
//cerr<<clock()<<endl;
Formylove;
}
手机信号
两个标记有些地方没覆盖好,炸成10分。不给大样例的数据机构和大模拟都是耍流氓好吗。
set可以做,但是我写得有点复杂,半天没搞出来,最后写了线段树。
区间维护四个东西,区间最左最右的信号站位置,一个区间建信号站的标记和一个区间清空的标记。
查pos的时候查1~pos中最靠右的和pos~n中最靠左的即可。
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=2e5+;
using namespace std;
typedef long long LL;
typedef double db;
int m,up=1e9+;
LL c,ans;
char o[]; template<typename T>void read(T &x) {
T f=; x=; char ch=getchar();
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int rt,tot,ch[N*][],ll[N*],rr[N*],lz[N*];
#define lc ch[x][0]
#define rc ch[x][1]
#define mid ((l+r)>>1)
int newnode() { ++tot; ll[tot]=up+; rr[tot]=; return tot;} void down(int x,int l,int r) {
if(!lz[x]) return;
if(lz[x]==-) {
if(lc) { ll[lc]=up+; rr[lc]=; lz[lc]=-; }
if(rc) { ll[rc]=up+; rr[rc]=; lz[rc]=-; }
lz[x]=;
}
else {
if(!lc) lc=newnode(); if(!rc) rc=newnode();
int v=lz[x];
if(ll[x]<=mid) {
ll[lc]=rr[lc]=ll[x]; lz[lc]=lz[x];
if(ll[lc]+lz[x]<=mid) rr[lc]=ll[lc]+(mid-ll[lc])/v*v;
}
else { ll[lc]=up+; rr[lc]=; lz[lc]=-; }
if(rr[x]>mid) {
rr[rc]=ll[rc]=rr[x]; lz[rc]=lz[x];
if(rr[rc]-v>mid) ll[rc]=rr[rc]-(rr[rc]-(mid+))/v*v;
}
else { ll[rc]=up+; rr[rc]=; lz[rc]=-; }
lz[x]=;
}
} void upd(int x) {
ll[x]=min(ll[lc],ll[rc]);
rr[x]=max(rr[lc],rr[rc]);
} void clear(int x,int l,int r,int ql,int qr) {
if(!x) return;
if(l>=ql&&r<=qr) {
ll[x]=up+; rr[x]=;
lz[x]=-; return;
}
down(x,l,r);
if(ql<=mid) clear(lc,l,mid,ql,qr);
if(qr>mid) clear(rc,mid+,r,ql,qr);
upd(x);
} void update(int &x,int l,int r,int ql,int qr,int v) {
if(!x) x=newnode();
if(l>=ql&&r<=qr) {
int lv=(l-ql)%v==?l:ql+((l-ql)/v+)*v;
int rv=max(lv,(r-ql)%v==?r:ql+(r-ql)/v*v);
if(lv<=r&&rv>=l) {
ll[x]=lv; rr[x]=rv; lz[x]=v;
}
return;
}
down(x,l,r);
if(ql<=mid) update(lc,l,mid,ql,qr,v);
if(qr>mid) update(rc,mid+,r,ql,qr,v);
upd(x);
} int qry(int x,int l,int r,int ql,int qr,int f) {
if(!x) {
if(f==) return ;
if(f==) return up+;
}
if(l>=ql&&r<=qr) {
return f==?rr[x]:ll[x];
}
down(x,l,r);
if(qr<=mid) return qry(lc,l,mid,ql,qr,f);
if(ql>mid) return qry(rc,mid+,r,ql,qr,f);
return f==?(max(qry(lc,l,mid,ql,qr,f),qry(rc,mid+,r,ql,qr,f))):
(min(qry(lc,l,mid,ql,qr,f),qry(rc,mid+,r,ql,qr,f)));
} #define ANS
int main() {
#ifdef ANS
freopen("cellphone.in","r",stdin);
freopen("cellphone.out","w",stdout);
#endif
int tpp=;
read(m); read(c);
ll[]=up+; rr[]=;
For(cs,,m) {
if(cs==) {
int debug=;
}
scanf("%s",o);
int l,r,v,x;
if(o[]=='c') {
read(l); read(r); read(v);
l++; r++;
update(rt,,up,l,r,v);
}
else if(o[]=='d') {
read(l); read(r);
l++; r++;
clear(rt,,up,l,r);
}
else if(o[]=='q') {
read(x); x++;
ans=-;
int p1=qry(rt,,up,,x,);
int p2=qry(rt,,up,x,up,);
if(p1!=) ans=x-p1;
if(p2!=up+) {
if(ans==-||ans>p2-x)
ans=p2-x;
}
if(ans==-) puts("");
else {
ans=max(0LL,c-ans*ans);
printf("%lld\n",ans);
}
}
}
//cerr<<clock()<<endl;
Formylove;
}
量子纠缠
总觉得这道题有些地方我没有搞清楚吧。。。但是又说不出来到底哪里有什么问题。
不纠缠的时候字典树就可以解决,要纠缠就要合并字典树上的节点,考虑用并查集来合并节点,合并的时候并查集里父亲改了,递归下去合并儿子。
代码的话就注意一下有标注的地方吧。
//Achen
#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
#define Formylove return 0
const int N=8e6+;
using namespace std;
typedef long long LL;
typedef double db;
int m;
char a[N]; template<typename T>void read(T &x) {
T f=; x=; char ch=getchar();
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} int fa[N];
int find(int x) { return x==fa[x]?x:fa[x]=find(fa[x]); } int rt,tot,ch[N][],is[N];
int &ins(int w) {
int x=rt,len=strlen(a);
For(i,,len-) {
int c=a[i]-'';
if(!ch[x][c]) {
ch[x][c]=++tot;
fa[tot]=tot; ///////////////////!!!!!!!!!!!!!!!!!!!!
}
x=find(ch[x][c]); ///////////////////!!!!!!!!!!!!!!!!!!!!
}
int c=a[len-]-'';
if(!ch[x][c]) { ch[x][c]=++tot; fa[tot]=tot; ///////////////////!!!!!!!!!!!!!!!!!!!!}
if(w) is[find(ch[x][c])]=w; ///////////////////!!!!!!!!!!!!!!!!!!!!
return ch[x][c];
} void qry() {
int x=rt,len=strlen(a);
For(i,,len-) {
int c=a[i]-'';
x=find(ch[x][c]);
if(!x) break;
}
printf("%d\n",is[x]);
} void merge(int &x,int &y) {
if(!x&&!y) return;
if(!x) x=y;
else if(!y) y=x;
else {
int fx=find(x),fy=find(y);
if(fx==fy) return ;
if(is[fy]) is[fx]=;
fa[fy]=fx;
For(i,,) {
merge(ch[fx][i],ch[fy][i]);
fx=find(fx); ///////////////////!!!!!!!!!!!!!!!!!!!!
}
}
} #define ANS
int main() {
#ifdef ANS
freopen("quantum.in","r",stdin);
freopen("quantum.out","w",stdout);
#endif
read(m);
For(cs,,m) {
int o;
read(o); scanf("%s",a);
if(o==) ins();
else if(o==) qry();
else {
int &x=ins();
scanf("%s",a);
int &y=ins();
merge(x,y);
}
}
//cerr<<clock()<<endl;
Formylove;
}
NOIp2018集训test-9-21(am/pm)的更多相关文章
- NOIp2018集训test-9-19(am&pm)
AM 这是一套在长沙考过而且我能记得全部正解的题,然后期望得分300实际得分155. T1 很套路,随便搞(我当年是怎么花大半场时间写T1并且写出现在两倍长的代码的??) //Achen #inclu ...
- NOIp2018集训test-10-24(am&pm)
李巨连续AK三场了,我跟南瓜打赌李巨连续AK七场,南瓜赌李巨连续AK五场. DAY1 T1 qu 按题意拿stack,queue和priority_que模拟即可.特判没有元素却要取出的情况. T2 ...
- NOIp2018集训test-9-22(am/pm) (联考三day1/day2)
szzq学长出的题,先orz一下. day1 倾斜的线 做过差不多的题,写在我自己的博客里,我却忘得一干二净,反而李巨记得清清楚楚我写了的. 题目就是要最小化这个东西 $|\frac{y_i-y_j} ...
- NOIp2018集训test-9-17(pm)
T1记忆(memory) 我大概是只记忆只有七秒的金鱼吧.看了下以前的代码发现真的很简单,但是考场上只打了个暴力,虽然骗了88pt.就是枚举选的是哪个串,然后vis[i]表示选了i这些位能不能猜出它, ...
- NOIp2018集训test-9-8(pm) (联考一day2)
把T1题读错了,想了一个多小时发现不可做.然后打了t2,常数不优秀.然后去打t3,lct,结果打挂爆0了. 然后今天就爆炸了. 如果这是noip我今年就可以直接回去学常规了.学常规多好,多开心. 今天 ...
- NOIp2018集训test-9-7(pm) (联考一day1)
又被辉神吊打了.今天不仅被辉神李巨吊打,还给基本上给全班垫底了. 看到T3就知道是十进制快速幂,全机房考试的当时应该就我会,结果我tm没找到递推. Orz lyc BM直接水过,Orz wys六个fo ...
- NOIp2018集训test-9-6(pm)
T1T2是洛谷原题.Orz辉神290,被辉神吊起来打. 题 1 包裹快递 二分答案.这题似乎卡精度,不开long double二分500次都过不去. //Achen #include<algor ...
- NOIp2018集训test-9-5(pm)
老张说:这套题太简单啦,你们最多两个小时就可以AK啦! 题 1 数数 我看到T1就懵了,这就是老张两个小时可以AK的题的T1?? 然后我成功地T1写了1h+,后面1h打了t2.t3暴力,就很开心. 等 ...
- NOIp2018集训test-9-2(pm)
其实这套题我爆0了,T1define 写成ddefine编译错误 T2有两个变量爆int 但是我看zwh不在悄悄地改了,我心里还是十分愧疚(没有)的.主要是林巨已经虐我125了要是再虐我200分我大概 ...
随机推荐
- mysql5.7问题:[Note] InnoDB: Waiting for page_cleaner to finish flushing of buffer pool
在关闭mysql5.7的时候发现问题,一直处于夯住状态 [root@localhost ~]# /etc/init.d/mysqld stop Shutting down MySQL......... ...
- Mysql学习笔记(002)-基础查询
基础查询 # 进阶1:基础查询 /* 语法: select 查询列表 from 表名: 类似于:system.out.println(打印东西); 特点: 1.查询列表可以是:表中的字段,常量值,表达 ...
- C之输入输出函数(3) -- 请使用sscanf()
#include <stdio.h> int fscanf(FILE *__restrict__stream, const char *__restrict__format-string, ...
- Delphi QueryPerformanceCounter、QueryPerformanceFrequency函数,精确定时到ns
var t1,t2:int64; r1,r2,r3:double; begin QueryPerformanceFrequency(c1);//WINDOWS API 返回计数频率 (Intel86: ...
- 基于SpringBoot的花里胡哨配置
花里胡哨的配置 记录一下流行框架的一些常用配置 lomback配置文件 <?xml version="1.0" encoding="UTF-8"?> ...
- bzoj 2631
lct 基础(' ' ) 就当个纪念吧(' ' ) 毕竟写了4h, cut 部分一直naive 总是想找谁是儿子,然后最后发现直接提根就好了啊(' ' ) #include <i ...
- onethink中的用户登录session签名
用户登录签名问题,即防止伪造登录session,增加一个用户登录数组的加密签名 onethink的登录控制,先调用UC表中(UC表也是存储在网站或本地的数据库中的),确认登录信息.如果UC表登录成功, ...
- SQL中忘记用户登陆密码该如何修改
1.每个数据库登陆之前都必须先启动它本身的数据服务,SQL数据库也不例外,首先我们要做的是先打开我们的SQL数据服务! 2.随后在我们的开始菜单中找到我们的SQL启动图标,打开即可 3.弹出登录窗体( ...
- delete 和 splice 删除数组中元素的区别
delete 和 splice 删除数组中元素的区别 ` var arr1 = ["a","b","c","d"]; d ...
- scala 列表List
列表: 列表是不可变,也就是说不能通过赋值改变列表的元素: 列表有递归结构,而数据是连续的 List 类型:List() 同样也是List(String) 列表是基于Nil (是空的)和::(列表从前 ...