持续更新。。。纪念一下我的高分暴力。。。(好丢人啊qwq)

NOI2014 动物园

80pts

用倍增暴力跳nxt数组

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define MAXN 1000010
#define MOD 1000000007
#define ull unsigned long long
using namespace std;
int T,len,ans;
int nxt[MAXN],fp[22][MAXN];
char s[MAXN];
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%d",&T);
while(T--)
{
ans=1;
memset(nxt,0,sizeof(nxt));
scanf("%s",s+1);
len=strlen(s+1);
int p=0;
for(int i=2;i<=len;i++)
{
while(p&&s[p+1]!=s[i]) p=nxt[p];
if(s[p+1]==s[i]) p++;
nxt[i]=p;
}
for(int i=2;i<=len;i++) fp[0][i]=nxt[i];
for(int k=1;k<=21;k++)
for(int i=2;i<=len;i++)
fp[k][i]=fp[k-1][fp[k-1][i]];
for(int i=2;i<=len;i++)
{
int now=i;
for(int j=21;j>=0;j--)
if(fp[j][now]*2>i)
now=fp[j][now];
int cur_ans=0;
for(int j=21;j>=0;j--)
if(fp[j][now])
cur_ans+=(1<<j),now=fp[j][now];
ans=1ll*ans*(cur_ans+1)%MOD;
}
printf("%d\n",ans);
}
return 0;
}

NOI2016 优秀的拆分

95pts

hash直接水,\(n^2\)判断字符串是否相同

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define MAXN 1000010
#define ull unsigned long long
using namespace std;
int T,n,m;
int base[MAXN],kkk[MAXN];
long long ans;
char s[MAXN];
const int prime=233;
inline void init()
{
base[0]=1;
for(int i=1;i<=n;i++)
{
base[i]=base[i-1]*prime;
kkk[i]=kkk[i-1]*prime+s[i]-'a';
}
}
inline ull query(int l,int r){return kkk[r]-kkk[l-1]*base[r-l+1];}
inline bool check(int l,int r)
{
if((r-l+1)&1) return false;
int mid=(l+r)>>1;
if(query(l,mid)==query(mid+1,r)) return true;
return false;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%d",&T);
while(T--)
{
ans=0;
scanf("%s",s+1);
n=strlen(s+1);
init();
for(int i=1;i<=n;i++)
{
int st=0,en=0;
for(int j=1;j<=i;j++)
if(check(j,i)) en++;
for(int j=i+1;j<=n;j++)
if(check(i+1,j)) st++;
ans+=1ll*en*st;
}
printf("%lld\n",ans);
}
return 0;
}

CTS2019 无处安放

前三个可以手算:

//test1
1 0 0 1
1 0 2 1
1 10 0 1
1 18 0 0
1 34 0 1
1 34 2 1
1 26 0 0
1 40 0 1
//test2
1 2 0 1
1 2 5 0
1 10 5 1
1 13 3 0
1 16 8 0
1 13 7 1
1 16 7 0
1 0 0 0
1 6 7 1
1 6 0 0
1 13 0 1
1 10 0 1
//test3
1 0 5 1
1 3 5 0
1 5 0 0
1 9 9 0
1 5 5 0
1 10 4 1
1 0 0 0
1 5 8 0
1 8 3 1
1 12 6 1
1 3 8 0
1 6 5 0
1 5 3 1
1 12 3 1
1 6 8 1
1 9 4 0
//test4贪心代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#define MAXN 100010
using namespace std;
int type,k,n,m;
bool done[MAXN];
vector<int>vec;
struct Node{int id,x,y,ansx,ansy,op,dir;}node[MAXN];
inline bool cmp1(struct Node a,struct Node b)
{
if(a.y==b.y) return a.x>b.x;
return a.y>b.y;
}
inline bool cmp2(struct Node a,struct Node b){return a.id<b.id;}
int main()
{
freopen("nowhere4.in","r",stdin);
freopen("nowhere4.out","w",stdout);
scanf("%d%d",&type,&k);
scanf("%d%d",&n,&m);
for(int i=1;i<=k;i++)
{
scanf("%d%d",&node[i].x,&node[i].y);
if(node[i].x>node[i].y) swap(node[i].x,node[i].y),node[i].dir=1;
node[i].id=i;
}
int now=0;
sort(&node[1],&node[k+1],cmp1);
// for(int i=1;i<=100;i++) printf("%d %d\n",node[i].x,node[i].y);
for(int i=1;i<=k;i++)
{
if(node[i].y!=4) break;
done[i]=1;
node[i].op=1;
node[i].ansx=now,node[i].ansy=0;
now+=node[i].x;
if(node[i].x==4&&node[i].y==4) vec.push_back(i);
}
// cout<<now<<endl;
int cur1=now,cur2=now,cnt=0;
for(int i=1;i<=k;i++)
{
if(node[i].x==3&&node[i].y==3)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur1,node[i].ansy=0;
cur1+=node[i].x;
cnt++;
if(cnt==448) break;
}
}
// printf("cur1=%d\n",cur1);
cnt=0;
for(int i=1;i<=k;i++)
{
if(node[i].x==1&&node[i].y==3)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur2,node[i].ansy=3;
cur2+=node[i].y;
node[i].dir=1;
cnt++;
if(cnt==448) break;
}
}
// printf("cur2=%d\n",cur2);
now=cur1;
cur1=now,cur2=now;int cur3=now;
cnt=0;
for(int i=1;i<=k;i++)
{
if(node[i].x==3&&node[i].y==3&&done[i]==0)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur1,node[i].ansy=0;
cur1+=node[i].x;
cnt++;
if(cnt==350) break;
}
}
cnt=0;
// printf("cur1=%d\n",cur1);
for(int i=1;i<=k;i++)
{
if(node[i].x==1&&node[i].y==1&&done[i]==0)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur2,node[i].ansy=3;
cur2+=3;
cnt++;
if(cnt==350) break;
}
}
cnt=0;
// printf("cur2=%d\n",cur2);
for(int i=1;i<=k;i++)
{
if(node[i].x==1&&node[i].y==2&&done[i]==0)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur3+1,node[i].ansy=3;
node[i].dir=1;
cur3+=3;
cnt++;
if(cnt==350) break;
}
}
now=cur1;
cur1=now,cur2=0;
for(int i=1;i<=k;i++)
{
if(node[i].x==2&&node[i].y==3&&done[i]==0)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur1,node[i].ansy=(cur2==0?0:2);
node[i].dir=1;
if(cur2==1)cur1+=3;
cur2^=1;
}
}
now=cur1,cur1=now,cur2=0;
for(int i=1;i<=k;i++)
{
if(node[i].x==2&&node[i].y==2&&done[i]==0)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur1,node[i].ansy=(cur2==0?0:2);
if(cur2==1)cur1+=2;
cur2^=1;
}
}
for(int i=1;i<=k;i++)
{
if(node[i].x==1&&node[i].y==2&&done[i]==0)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur1,node[i].ansy=2;
node[i].dir=1;
break;
}
}
for(int i=1;i<=k;i++)
{
if(node[i].x==1&&node[i].y==2&&done[i]==0)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur1,node[i].ansy=3;
node[i].dir=1;
break;
}
}
now=cur1+2;
cur1=now,cur2=0;
for(int i=1;i<=k;i++)
{
if(node[i].x==1&&node[i].y==2&&done[i]==0)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur1,node[i].ansy=(cur2==0?0:2);
if(cur2==1)cur1+=1;
cur2^=1;
}
}
now=cur1;
// cout<<now<<endl;
for(int i=1;i<=k;i++)
{
if(node[i].x==1&&node[i].y==1&&done[i]==0)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur1,node[i].ansy=2;
node[i].dir=1;
break;
}
}
for(int i=1;i<=k;i++)
{
if(node[i].x==1&&node[i].y==1&&done[i]==0)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur1,node[i].ansy=3;
node[i].dir=1;
break;
}
}
now=cur1+1;
cur1=now,cur2=0;
// cout<<now<<endl;
for(int i=1;i<=k;i++)
{
if(node[i].x==1&&node[i].y==1&&done[i]==0)
{
// cout<<i<<endl;
done[i]=1;
node[i].op=1;
node[i].ansx=cur1;
node[i].ansy=cur2;
cur2++;
if(cur2==4)cur1++;
if(cur1>=7518) break;
cur2%=4;
}
}
cur1=0,cur2=0,cur3=0,cnt=0;
node[vec[0]].op=node[vec[1]].op=node[vec[2]].op=0;
for(int i=1;i<=k;i++)
{
if(done[i]==0&&node[i].x==1&&node[i].y==1)
{
done[i]=1;
node[i].op=1;
node[i].ansx=cur2,node[i].ansy=cur3;
cur3++;
if(cur3==4)cur2++,cur3=0;
}
}
// for(int i=1;i<=k;i++)
// {
// if(node[i].op==0)
// printf("%d %d\n",node[i].x,node[i].y);
// }
sort(&node[1],&node[k+1],cmp2);
for(int i=1;i<=k;i++)
{
// if(node[i].x==1&&node[i].y==3)
if(node[i].op==0) printf("0\n");
else printf("%d %d %d %d\n",node[i].op,node[i].ansx,node[i].ansy,node[i].dir);
}
return 0;
}

CTS2019 珍珠

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define MAXN 4010
#define mod 998244353
using namespace std;
int d,n,m,ans;
int dp[MAXN][MAXN];
inline int fpow(int x,int y)
{
int cur_ans=1;
while(y)
{
if(y&1) cur_ans=1ll*cur_ans*x%mod;
x=1ll*x*x%mod;
y>>=1;
}
return cur_ans;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%d%d%d",&d,&n,&m);
if(m<=1)
{
printf("%d\n",fpow(d,n)%mod);
return 0;
}
dp[0][0]=1;
for(int i=0;i<n;i++)
for(int j=0;j<=d;j++)
{
if(j+1<=d) dp[i+1][j+1]=(dp[i+1][j+1]+1ll*dp[i][j]*(d-j)%mod)%mod;
if(j-1>=0) dp[i+1][j-1]=(dp[i+1][j-1]+1ll*dp[i][j]*j%mod)%mod;
}
for(int i=0;i<=d;i++)
{
if(n-i>=2*m)
ans=(ans+dp[n][i])%mod;
}
printf("%d\n",ans);
return 0;
}

NOI2016 国王饮水记

53pts

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define MAXN 100010
using namespace std;
int n,k,p;
double a[MAXN],tmp[MAXN];
inline bool cmp(int x,int y){return x>y;}
namespace subtask1
{
inline void solve()
{
double cur_ans=a[1],ans=0;
double cur=a[1];
sort(&a[1],&a[n+1],cmp);
for(int i=1;i<=n;i++)
{
if(a[i]==cur) break;
cur_ans+=a[i];
ans=max(ans,cur_ans/(i+1));
}
printf("%lf\n",ans);
}
}
namespace subtask2
{
inline void solve()
{
double cur_ans=a[1],ans=0;
double cur=a[1];
sort(&a[1],&a[n+1]);
int i;
for(i=1;i<=n;i++)
if(a[i]==cur) break;
// printf("i=%d\n",i);
while(i<=n)
{
if(a[i]<a[1]) continue;
a[1]=(a[1]+a[i])/2;
i++;
}
printf("%lf\n",a[1]);
}
}
namespace subtask3
{
inline void solve()
{
vector<double>vec;
for(int i=2;i<=n;i++)
if(a[i]>a[1])
vec.push_back(a[i]);
sort(vec.begin(),vec.end());
for(int i=vec.size()-k;i<vec.size();i++)
if(vec[i]>a[1])
a[1]=(a[1]+vec[i])/2;
printf("%lf\n",a[1]);
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
// freopen("ce.out","w",stdout);
#endif
int cnt=0;
scanf("%d%d%d",&n,&k,&p);
for(int i=1;i<=n;i++) scanf("%lf",&a[i]);
for(int i=2;i<=n;i++)
if(a[i]>a[1])
cnt++;
if(k==1) subtask1::solve();
else if(k>=cnt) subtask2::solve();
else subtask3::solve();
return 0;
}

根据dfs序生成树:

inline void dfs(int cur)
{
if(cur>=n){return;}
int x=a1[cur],y=a1[cur+1],z=fa[x];
fa[y]=x;
e[x].push_back(y);
dfs(cur+1);
e[x].pop_back();
for(;z;z=fa[z])
{
fa[y]=z;
e[z].push_back(y);
dfs(cur+1);
e[z].pop_back();
}
}

没有过的题QAQ的更多相关文章

  1. Codeforces Round #442 (Div. 2) B题【一道模拟题QAQ】

    B. Nikita and string One day Nikita found the string containing letters "a" and "b&qu ...

  2. 牛客网暑期ACM多校训练营(第一场)菜鸟补题QAQ

    签到题 J Different Integers(树状数组) 题目大意:给一个长为n的数组,每一个询问给两个数字i, j ,询问1~i, j~n这两个区间中有多少不同的数字,真的像是莫队裸题,但是两个 ...

  3. ProjectEuler 做题记录

    退役选手打发时间的PE计划 挂在这里主要是dalao们看到有什么想交流的东西可以私聊哦(站内信或邮箱吧)~~当然现在高三也不怎么能上网. 2017/8/11  595 :第一题QAQ 2017/8/1 ...

  4. BZOJ 1061: [Noi2008]志愿者招募【单纯形裸题】

    1061: [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 4813  Solved: 2877[Submit][Stat ...

  5. ProjectEuler && Rosecode && Mathmash做题记录

    退役选手打发时间的PE计划 挂在这里主要是dalao们看到有什么想交流的东西可以私聊哦(站内信或邮箱吧) 2017/8/11  PE595 :第一题QAQ 2017/8/12  PE598 2017/ ...

  6. csp刷题

    title: csp刷题 date: 2018-12-13 16:41:33 tags: --- Markdown 在第7个点挂了,,,不改了,,,太恶心了这种题QAQ,,,, 有谁想改的改完了告诉我 ...

  7. noip做题记录+挑战一句话题解?

    因为灵巧实在太弱辽不得不做点noip续下命QQAQQQ 2018 积木大赛/铺设道路 傻逼原题? 然后傻逼的我居然检查了半天是不是有陷阱最后花了差不多一个小时才做掉我做过的原题...真的傻逼了我:( ...

  8. BZOJ4401: 块的计数 思维题

    Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对这种事情毫无兴趣,只是 ...

  9. (计数器)NOIP模拟赛(神奇的数位DP题。。)

    没有原题传送门.. 手打原题QAQ [问题描述]     一本书的页数为N,页码从1开始编起,请你求出全部页码中,用了多少个0,1,2,…,9.其中—个页码不含多余的0,如N=1234时第5页不是00 ...

随机推荐

  1. linux下静默安装 weblogic12.2.1.3中间件

    第一步:准备需要的安装包文件,这里注意 weblogic12.2.*需要的最低JDK版本为1.8以上 1.查看当前的镜像列表:docker images 2.运行镜像,并进入容器,这里运行基本的cen ...

  2. Spring框架的事务管理之基于AspectJ的XML方式(重点掌握)

    1. 步骤一:恢复转账开发环境(转账开发环境见“https://www.cnblogs.com/wyhluckdog/p/10137283.html”) 2.步骤二:引入AOP的开发包3.步骤三:引入 ...

  3. Django配置Bootstrap, js

    1.首先在APP目录下创建一个static文件夹 如图: # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'dj ...

  4. [SoapUI] 设置最大等待时间,不断重复的去发送一个request,每次从response中获取一个status,直到这个status从一种状态变成另外一种状态

    import com.eviware.soapui.support.GroovyUtils def groovyUtils = new GroovyUtils( context ) def holde ...

  5. 安卓编译 translate error Lint: How to ignore “<key> is not translated in <language>” errors?

    Add following at the header of your strings.xml file <resources xmlns:tools="http://schemas. ...

  6. Android系统root破解原理分析

    http://dengzhangtao.iteye.com/blog/1543494 root破解过程的终极目标是替换掉系统中的su程序.但是要想替换掉系统中su程序本身就是需要root权限的,怎样在 ...

  7. 使用delphi 开发多层应用(二十四)KbmMW 的消息方式和创建WIB节点

    KbmMW 中支持基于UDP的消息广播,也支持TCP/IP hub/spoke 方式,还有 基于UDP或者TCP/IP 的点对点的消息传输. 1.基于UDP的消息广播

  8. 2018.08.30 bzoj4720: [Noip2016]换教室(期望dp)

    传送门 一道无脑的期望dp. 用f[i][j][0/1]表示前i堂课提出了j次申请且第i堂课没有(有)提出申请. 这样就可以状态转移了. 然而这题状态转移方程有点长... (主要是情况多... 代码: ...

  9. hdu-1143(简单dp)

    题目链接: 思路:利用前一个状态找到本次状态需要的次数,就是递推. 建立一个二维数组dp[i][j] ,i表示行,j表示多余的格子. 可以分为三种状态dp[i][0], dp[i][1] ,dp[i] ...

  10. 35. Romantic Love and Ideal Romantic Relationship 爱情及理想爱情关系

    35. Romantic Love and Ideal Romantic Relationship 爱情及理想爱情关系 ① Romantic love has clear evolutionary r ...