持续更新。。。纪念一下我的高分暴力。。。(好丢人啊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. 表单提交的两种请求方式:post与get。post与get两者的对比分析

    post与get两者的对比分析:

  2. 201621123008《Java程序设计》第七周学习总结

    1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 监听,事件源,事件,注册. 1.2 任意编写事件处理 ...

  3. 解决 cmake_symlink_library: System Error: Operation not supported

    在编译uchardet时遇到这个错误: cmake_symlink_library: System Error: Operation not supported 创建链接不成功,要确认当前帐户下是否有 ...

  4. Laravel5.4 Oauth2.0认证应用 API 实战!

    项目初始化 新建项目 lukeyans-MacBook-Pro:laravel lukeyan$ laravel new laravel_demo 添加laravel自带的Passport服务 luk ...

  5. NAND FLASH和LCD电路图

  6. Devexpress VCL Build v2014 vol 14.2.4 发布

    What's New in 14.2.4 (VCL Product Line)   New Major Features in 14.2 What's New in VCL Products 14.2 ...

  7. 2018.09.05 任务安排(斜率优化dp)

    描述 这道题目说的是,给出了n项必须按照顺序完成的任务,每项任务有它需要占用机器的时间和价值.现在我们有一台机器可以使用,它每次可以完成一批任务,完成这批任务所需的时间为一个启动机器的时间S加上所有任 ...

  8. python中的list和array的不同之处 及转换

    python中的list和array的不同之处list是列表,可以通过索引查找数值,但是不能对整个列表进行数值运算 In [96]: b=[1,2] In [97]: b[1]Out[97]: 2In ...

  9. MATLAB矩阵的一些用法

    1.怎样去提取和修改矩阵中的一个元素. (1)创建一个矩阵 >> A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16]A =     1     2     ...

  10. 小强 ROS 机器人教程

    首先请您自行依据线标提示将小强接线连接好,完整结构如下两图所示: 小强是属于Turtlebot机器人.它由底盘.主机.Kinect相机(通过USB连接主机)组成,没有显示屏.如果要通过显示器查看主机的 ...