RP-=inf。。。。。。。

一场考试把rp败光。。。由于本次考试本人在考试中乱说自己AK导致rp--,本人当选为机房倒数第二没素质

不过AK一次还挺开心的。。。

达哥出的题还是比较简单的。

T1:考察位运算的技巧,对于所有的操作按位考虑即可。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a,b,c;
long long bin[];
long long an[];
long long ans;
inline void init()
{
for(int i=;i<=;++i)bin[i]=1ll<<i;
an[]=;
for(int i=;i<=;++i)an[i]=an[i-]*;
}
inline int getnum(int x)
{
int ret=;
while(x){ret+=x&;x>>=;}
return ret;
}
inline void work1()
{
int t=getnum(b);
printf("%lld\n",an[t]);
}
inline void work5()
{
if((a^b)!=c){puts("");return;}
int t=getnum(c);
printf("%lld\n",bin[t]);
}
inline void work2()
{
if((b&c)!=c){puts("");return;}
a=b^c;
work5();
}
inline void work3()
{
if(a&c){puts("");return;}
b=a|c;work5();
}
inline void work4()
{
if((b&a)!=a){puts("");return;}
c=a^b;work5();
}
int main()
{
init();
int T;scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&a,&b,&c);
if(b==-&&c==-)
{
puts("inf");continue;
}
if(a==-&&c==-)
{
work1();continue;
}
if(a==-&&b==-)
{
puts("inf");continue;
}
if(a==-)
{
work2();continue;
}
if(b==-)
{
work3();continue;
}
if(c==-)
{
work4();continue;
}
work5();
}
}

冗长讨论

T2:把对于全部的数的加减用变量维护即可,对于取交和取并直接打时间戳维护即可

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
char xch,xB[<<],*xS=xB,*xTT=xB;
#define getc() (xS==xTT&&(xTT=(xS=xB)+fread(xB,1,1<<15,stdin),xS==xTT)?0:*xS++)
inline int read()
{
int x=,f=;char ch=getc();
while(ch<''|ch>''){if(ch=='-')f=-;ch=getc();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getc();}
return x*f;
}
using namespace std;
const long long kx=;
int pd[],n;
int sum,num=;
long long plu,ans;
inline void work1()
{
int m=read(),a,b,c;
for(int i=;i<=m;++i)
{
a=read()+kx;
if(pd[a-plu]==num)continue;
pd[a-plu]=num;
++sum;ans+=a-plu;
}
}
inline void work2()
{
int m=read(),a,b,c;
sum=;ans=;
for(int i=;i<=m;++i)
{
a=read()+kx;
if(pd[a-plu]!=num)continue;
pd[a-plu]=num+;
++sum;ans+=a-plu;
}
++num;
}
int main()
{
// freopen("ex_jihe4.in","r",stdin);
// freopen("my.out","w",stdout);//diff -b -B ex_jihe4.ans my.out
n=read();int opt;
while(n--)
{
opt=read();
switch(opt){
case :{
work1();
break;
}
case :{
work2();
break;
}
case :{
++plu;
break;
}
case :{
--plu;
break;
}
}
printf("%lld\n",ans+plu*sum-kx*sum);
}
}

感谢达哥的fread

T3:稍神奇,图论+容斥原理。

先对所有的白块染色,相连的染成同一种颜色。顺手用桶统计答案

这时发现统计多了,对于一些情况会统计多。考虑容斥,奇加偶减,对于每个非空白点,先把周围的块统计一下,排序去重,手动枚举集合,用hash搞掉,用hash_map储存

分类讨论奇加偶减即可。。。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
#define N 1050
using namespace std;
int a[N][N];
int bk[];
long long ans;
int n,num=,m,k;
int pd[N][N];
const int dx[]={,-,,};
const int dy[]={,,,-};
struct QaQ{
pair<int,int>a[];
int fr,ba;
inline int size(){return ba-fr;}
inline void push(int x,int y){a[ba]=make_pair(x,y);++ba;}
inline void clear(){ba=fr=;}
inline void pop(){++fr;}
inline int fir(){return a[fr].first;}
inline int sec(){return a[fr].second;}
}q;
inline void bfs1(int x,int y)
{
q.clear();++num;pd[x][y]=num;
int tx,ty,c;q.push(x,y);
while(q.size())
{
x=q.fir();y=q.sec();q.pop();
for(int i=;i<;++i)
{
tx=x+dx[i];ty=y+dy[i];
if(tx<=||ty<=||tx>n||ty>m||pd[tx][ty]==num)continue;
pd[tx][ty]=num;c=a[tx][ty];
if(c){ans+=bk[c];++bk[c];}
else q.push(tx,ty);
}
}
}
inline void bfs2(int x,int y)
{
q.clear();++num;pd[x][y]=num;
int tx,ty,c;q.push(x,y);
while(q.size())
{
x=q.fir();y=q.sec();q.pop();
for(int i=;i<;++i)
{
tx=x+dx[i];ty=y+dy[i];
if(tx<=||ty<=||tx>n||ty>m||pd[tx][ty]==num)continue;
pd[tx][ty]=num;c=a[tx][ty];
if(c)bk[c]=;
else q.push(tx,ty);
}
}
}
int pd2[],t1[];
inline int get1(int x,int y)
{
int tx,ty;t1[]=;
for(int i=;i<;++i)
{
tx=x+dx[i];ty=y+dy[i];
if(tx<=||ty<=||tx>n||ty>m||a[tx][ty])continue;
t1[++t1[]]=pd[tx][ty];pd2[pd[tx][ty]]=;
}
}
inline int get2(int x,int y)
{
int tx,ty;
for(int i=;i<;++i)
{
tx=x+dx[i];ty=y+dy[i];
if(tx<=||ty<=||tx>n||ty>m||a[tx][ty])continue;
if(pd2[pd[tx][ty]])return ;
}
return ;
}
void down1()
{
for(int i=;i<=t1[];++i)pd2[t1[i]]=;
}
inline void work2()
{
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
{
get1(i,j);
if(a[i][j]&&a[i][j]==a[i][j+])
ans+=get2(i,j+);
if(a[i][j]&&a[i][j]==a[i+][j])
ans+=get2(i+,j);
// printf("i:%d j:%d ans:%lld\n",i,j,ans);
down1();
}
}
const int mod=;
const int tt=;
#define ull unsigned long long
struct hash_map{
int he[mod],tot;
int ne[],to[];
ull val[];
inline void add(ull x){
int k=x%mod;
for(int i=he[k];i;i=ne[i])
{
if(val[i]==x)
{
++to[i];
return;
}
}
to[++tot]=;ne[tot]=he[k];he[k]=tot;val[tot]=x;
}
inline int getval(ull x){
int k=x%mod;
for(int i=he[k];i;i=ne[i])
if(val[i]==x)
return to[i];
return ;
}
}H;
inline void duce(int x,int y,int z)
{
ull t=x;t=t*tt+y;t=t*tt+z;
ans-=H.getval(t);H.add(t);
}
inline void pluss(int w,int x,int y,int z)
{
ull t=w;t=t*tt+x;t=t*tt+y;t=t*tt+z;
ans+=H.getval(t);H.add(t);
}
inline void duce2(int v,int w,int x,int y,int z)
{
ull t=v;t=t*tt+w;t=t*tt+x;t=t*tt+y;t=t*tt+z;
ans-=H.getval(t);H.add(t);
}
inline void work3()
{
int c;
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
{
if(!a[i][j]||!pd[i][j])continue;
get1(i,j);c=a[i][j];
if(t1[]<)continue;
sort(t1+,t1+t1[]+);
t1[]=unique(t1+,t1+t1[]+)-t1-;
if(t1[]<)continue;
if(t1[]==)
{
duce(t1[],t1[],c);
continue;
}
if(t1[]==)
{
duce(t1[],t1[],c);
duce(t1[],t1[],c);
duce(t1[],t1[],c);
pluss(t1[],t1[],t1[],c);
}
if(t1[]==)
{
duce(t1[],t1[],c);
duce(t1[],t1[],c);
duce(t1[],t1[],c);
duce(t1[],t1[],c);
duce(t1[],t1[],c);
duce(t1[],t1[],c);
pluss(t1[],t1[],t1[],c);
pluss(t1[],t1[],t1[],c);
pluss(t1[],t1[],t1[],c);
pluss(t1[],t1[],t1[],c);
duce2(t1[],t1[],t1[],t1[],c);
}
}
}
int main()
{
// freopen("ex_link5.in","r",stdin);
// freopen("my.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
a[i][j]=read();
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
if(!a[i][j]&&!pd[i][j])
{
bfs1(i,j);bfs2(i,j);
}
work2();
work3();
cout<<ans<<endl;
/*
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
printf("%d ",pd[i][j]);
}
puts("");
}
*/
}

rp++

最后:

  此刻我十分后悔,我做了一件错事,我简直不能原谅我自我!昨日我无视学校的规章制度,藐视校领导的决定,私自乱说AK。

   这天,我怀着愧疚、懊悔和忐忑的情绪给您写下这份检讨书,以向您表示我对这种恶劣行为的深痛恶绝及保证不再犯的决心。

   早在我刚踏进这个学校的时候,学校就已经三令五申,一再强调,学生,不得乱说AK。这两天,老师反复教导言犹在耳,严肃认真的表情犹在眼前,我深为震撼,也已经深刻认识到此事的重要性,在老师的耐心教导下,透过学习学生手则中学生管理规定,使我认识到了问题的严重性,并对自我违反校纪校规的行为进行了认真的反思和深刻的自剖。

   在此,我谨向各位领导、老师做出深刻检讨,并将我这两天透过反思认为深藏在本人思想中的致命错误有以下几点结果汇报如下:

   第一,我的行为不贴合一个中学生的要求。作为当代中学生,我们就应识大体、顾大局,在校纪校规面前人人平等,我不就应为了一己之便违反校纪校规。

   第二,思想觉悟不高,对重要事项重视严重不足。就算是有认识,也没能在行动上真正实行起来。

   第三,在学习期间,我们应主动配合学院搞好安全工作,学院老师三令五申、班干也一再强调,要求我们不能乱说AK,但我把这些都成了耳旁风,这些都是不就应的。

   第四,我的行为还在同学间造成了极坏的影响。同学之间本就应互相学习,互相促进,而我的表现给同学们带了一个坏头,不利于校风和院风的建设。同时,也对学校形象造成了必须损害。想着带一次也无所谓,当时的侥幸心理酿成了此刻的后果。虽然我这种行为方便了自我,但是,我是在自私自利的帽子下,方便自我的。只有认真反思,寻找极大错误后面的深刻根源,认清问题的本质,才能给群众和自我一个交待,从而得以进步。做为一名学生,我没有做好自我的本职,给学校老师和学生会干部的工作带来了很大的麻烦。

   据上,在深刻的自我反思之后,我决定有如下个人整改措施:第一,从错误根源进行深挖细找的整理,并认清其可能造成严重。第二,提高认识,狠抓落实,大力开展批评与自我批评。

   第三,制定学习计划,认真克服生活懒散、粗心的坏习惯,按照老师要求上交资料深刻的检讨书一份,对自我思想上心大意的缺点,努力将期考考好,以好成绩弥补我的过错。

   第四,和同学、班干以及学生会干部加强沟通。保证今后不再出现违反校纪校规的状况。我十分感谢老师和学生会干部对我所犯错误的及时指正,我保证今后不会再有类似行为发生在我身上,并决心为我校的安全工作和迎评工作作出自我的一份微薄之力。

   第五,从思想上,我重新检讨自我,坚持从认识上,从观念上转变,要求上进,关心群众,关心他人,多和优秀同学接触,交流。纪律上,此刻我必须要比以前要有了很大改变,此刻的我对自我的言行,始终持续严格的约束,不但能遵守校规校纪,更加懂得了身为一名学生哪些事能够做的,哪些是不能够做的。学习上,我能够不避困难,自始至终为掌握更多知识,使自我的素质全面得到提升。

   第六,保证不再出现上述错误。期望老师能够原谅我!最后请关心爱护我的老师同学继续监督、帮忙我改正缺点,取得更大的进步。

buyaotui

果然,第二场炸了。(rp守恒.flag)

然而某脸又双ruozhuo rank1了。

开场康T1,水,康T2,推出式子发现第三个大样例过不了第一问,然后还剩下一个小时结束,就扔了看T3,然后看出正解,还剩40分钟,疯狂码码码,最后由于rp--没调出来。

然后就100+40+5结束day2。。。

T1:太水了不想说

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ull unsigned long long
const int p=;
using namespace std;
ull po[];
long long ans,al;
int n,m;
ull h1,h2;
char s[];
int pd[];
inline void init()
{
po[]=;
for(register int i=;i<=;++i)po[i]=po[i-]*p;
}
int main()
{
// freopen("ex_ccx2.in","r",stdin);
int T;scanf("%d",&T);init();
while(T--)
{
scanf("%d%d%s",&n,&m,s+);
h1=h2=;ans=al=;
for(int i=;i<m;++i)
{
pd[m-i+]=;
h1+=po[i-]*s[i];
h2=h2*p+s[m-i+];
if(h1==h2)
{
ans=i;pd[m-i+]=;
if(i>=m-i&&pd[i+])
al=i;
}
}
// cout<<"ans:"<<ans<<endl;
// if(ans<(m+1)/2){ans=max(ans,1ll*(n-1)*m);}
// else
ans=max(ans,al+1ll*(n-)*m);
if(!ans)puts("-1");
else printf("%lld\n",ans);
}
}

using hash or kmp

T2:胡图图,稍神,发现考场上推的第一问式子锅了。(其实第二问式子也锅了但不知道为啥第二问过了。。。)

然而蒟蒻只会咕咕咕和粘链接(%%% DeepinC

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define N 100050
using namespace std;
int n,m,s;
queue<int>q;
int tot,he[N],ne[N<<],to[N<<];
int ind[N],outd[N],pd[N],tag;
double dp[N],f[N],f2[N],mx[N],an1,an2;//vectory,lrd,wms
inline void addedge(int x,int y)
{
++outd[x];
to[++tot]=y;
ne[tot]=he[x];
he[x]=tot;
}
inline void work1()//MAX
{
double ma=0.0,p,m1=0.0;
// for(int i=1;i<=n;++i)ma=max(ma,dp[i]);
for(int i=n;i;--i)mx[i]=max(mx[i+],dp[i]);
for(int i=;i<=n;++i)
{
ma=max(m1,mx[i+]); if(f2[i]>f[i])
p=(f2[i]-f[i])*(ma)/(double)(outd[i]+) + f[i]*(1.0)/(double)(outd[i]+) +
(dp[s]-f[i]*dp[i]-f2[i]*(-dp[i]))+f[i]*dp[i]*outd[i]/(outd[i]+)+f2[i]*(-dp[i])*outd[i]/(outd[i]+);
else
p=f[i]*(1.0)/(double)(outd[i]+) +
(dp[s]-f[i]*dp[i]-f2[i]*(-dp[i]))+f[i]*dp[i]*outd[i]/(outd[i]+)+f2[i]*(1.0-dp[i])*outd[i]/(outd[i]+);
an1=max(an1,p);
m1=max(m1,dp[i]);
}
}
inline void work2()//AVR
{
double al=0.0,p;an2=0.0;
for(int i=;i<=n;++i)al+=dp[i];
for(int i=;i<=n;++i)
{
p=(al-dp[i])/(n-);
an2+=f2[i]*(p)/(double)(outd[i]+)+f[i]*(1.0-p)/(double)(outd[i]+)+(1.0-(f[i]+f2[i])/(double)(outd[i]+))*dp[s];
}
an2/=(double)n;
}
void sear(int g)
{
dp[g]=0.0;pd[g]=;
if(!outd[g])return;
for(int i=he[g];i;i=ne[i])
{
if(!pd[to[i]])sear(to[i]);
if(tag)++ind[to[i]];
dp[g]+=1.0-dp[to[i]];
}
dp[g]=dp[g]/(double)outd[g];
}
inline void tope()
{
q.push(s);f[s]=;f2[s]=;
int g,y;double g1,g2;
while(!q.empty())
{
g=q.front();q.pop();
if(!outd[g])continue;
g1=f[g]/(double)outd[g];
g2=f2[g]/(double)outd[g];
for(int i=he[g];i;i=ne[i])
{
y=to[i];--ind[y];
f2[y]+=g1;f[y]+=g2;
if(!ind[y])q.push(y);
}
}
}
int main()
{
// freopen("ex_htt3.in","r",stdin);
scanf("%d%d%d",&n,&m,&s);
for(int i=,x,y;i<=m;++i){
scanf("%d%d",&x,&y);
addedge(x,y);
}
scanf("%lf%lf",&an1,&an2);
tag=;sear(s);tag=;
for(int i=;i<=n;++i)
if(!pd[i])sear(i); tope();
/*
for(int i=1;i<=n;++i)
{
if(dp[i])
printf("i:%d ind:%d f:%.3lf f2:%.3lf dp:%.3lf\n",i,ind[i],f[i],f2[i],dp[i]);
}
*/ if(an1<0.0){work1();}
if(an2<0.0){work2();}
printf("%.3lf %.3lf\n",an1,an2);
}

T3:数据结构题,考察树上倍增的应用,预处理一波直接倍增维护即可

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define N 200050
using namespace std;
int n,m;
int he[N],ne[N<<],to[N<<],w[N<<],tot;
int dep[N],len;
int dp[N],ma1[N][],ma2[N][],ma3[N],fat[N];//dp值,最大,次大
inline void addedge(int x,int y){to[++tot]=y;ne[tot]=he[x];he[x]=tot;}
int f[N][],ma[N][];
inline void dfs1(int g,int fa)
{
int y;dep[g]=dep[fa]+;f[g][]=fa;dp[g]=;
for(int i=he[g];i;i=ne[i])
{
if(to[i]==fa)continue;
dfs1(to[i],g);y=to[i];
dp[g]=max(dp[g],dp[y]);
if(dp[y]>ma1[g][])
{
ma3[g]=ma2[g][];
ma2[g][]=ma1[g][];ma2[g][]=ma1[g][];
ma1[g][]=dp[y];ma1[g][]=y;
}
else if(dp[y]>ma2[g][])
{
ma3[g]=ma2[g][];
ma2[g][]=dp[y];ma2[g][]=y;
}
else if(dp[y]>ma3[g])
{
ma3[g]=dp[y];
}
}
len=max(len,ma1[g][]+ma2[g][]+);
++dp[g];
}
inline int getval(int g,int fa)
{
if(ma1[fa][]==g)return ma2[fa][];
return ma1[fa][];
}
inline void dfs2(int g,int fa)
{
int y;fat[g]=dp[fa];
ma[g][]=getval(g,fa);
dp[g]=;
for(int i=he[g];i;i=ne[i])
{
if(to[i]==fa)continue;y=to[i];
if(y==ma1[g][])dp[g]=max(fat[g]+,ma2[g][]+);
else dp[g]=max(fat[g]+,ma1[g][]+);
dfs2(to[i],g);
}
}
inline void init()
{
for(int j=;j<=;++j)
{
for(int i=;i<=n;++i)
{
f[i][j]=f[f[i][j-]][j-];
ma[i][j]=max(ma[i][j-],ma[f[i][j-]][j-]);
}
}
}
int ans;
inline int getans(int x,int y)
{
if(dep[x]>dep[y])swap(x,y);
for(int i=;~i;--i)
{
if(dep[f[y][i]]<dep[x])continue;
ans=max(ans,ma[y][i]);
y=f[y][i];
}
if(x==y)return x;
for(int i=;~i;--i)
{
if(f[y][i]==f[x][i])continue;
ans=max(ans,ma[y][i]);ans=max(ans,ma[x][i]);
y=f[y][i];x=f[x][i];
}
int lca=f[x][];
if(x==ma1[lca][]||y==ma1[lca][])
{
if(x==ma2[lca][]||y==ma2[lca][])
ans=max(ans,ma3[lca]);
else
ans=max(ans,ma2[lca][]);
}
else
{
ans=max(ans,ma1[lca][]);
}
return lca;
}
inline void work2()
{
dfs1(,);dfs2(,);
init();
int lca;len=(len+)>>;
for(int i=,x,y;i<=m;++i)
{
ans=;
scanf("%d%d",&x,&y);
if(x==y){printf("%d\n",len);continue;}
lca=getans(x,y);
if(lca!=x)ans=max(ans,ma1[x][]);
if(lca!=y)ans=max(ans,ma1[y][]);
ans=max(ans,fat[lca]);
printf("%d\n",ans);
}
}
int main()
{
scanf("%d",&n);
int ok1=;
for(int i=,x,y;i<n;++i){
scanf("%d%d",&x,&y);
if(x>y)swap(x,y);if(y!=x+)ok1=;
addedge(x,y);addedge(y,x);
}
scanf("%d",&m);
work2();
}

记得攒rp

最新文章

  1. jsp取得绝对路径的方法(避免请求转发的方式导致路径错误)
  2. MySql链接字符串 各种程序连接大合集(包括asp.net,c#,等等)
  3. Oracle注入漏洞
  4. javascript 隐性类型转换步骤
  5. [SLAM] GMapping SLAM源码阅读(草稿)
  6. CAS Proxy 的相关文章
  7. o2o
  8. 《转载》深入理解 cocos2d-x 坐标系
  9. Spring-----Spring Jar包
  10. 如何使用 Enterprise Architect 画 UML
  11. oracle12c
  12. ok6410如何从sdram中启动uboot 调试 这是一个猜想还没有验证
  13. CMDB-实例
  14. update_engine-FilesystemVerifierAction和PostinstallRunnerAction
  15. Dostoevsky: Better Space-Time Trade-Offs for LSM-Tree Based Key-Value Stores via Adaptive Removal of Superfluous Merging 阅读笔记
  16. SVN安装部署
  17. CentOS 安装 nexus (maven 私服)
  18. HIVE函数的UDF、UDAF、UDTF
  19. 【Zookeeper】编程实战之Zookeeper分布式锁实现秒杀
  20. ant design pro (十六)advanced 权限管理

热门文章

  1. 情感交流篇:HTML页面如何与后端联系
  2. Asp.Net Mvc项目添加WebApi
  3. C++ raw string literal
  4. TypeScript入门九:TypeScript的模块
  5. MyCAT详解【转】
  6. MyBatis-Spring 学习笔记一 SqlSessionFactoryBean以及映射器类
  7. CSS基础 布局
  8. 通过docker搭建ELK集群
  9. httpd源码编译安装
  10. Linux CentOS7 httpd 配置注释