持续更新。。。纪念一下我的高分暴力。。。(好丢人啊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. 超星网站cc++

    a系统 苏龙杰     a系统 苏龙杰     目录 1 C/C ++程序设计 1.1 前 言 1.2 第一部分 基 础 篇 1.2.1 第1章 初识C 1.2.1.1 1.1 C语言的诞生与发展 1 ...

  2. [NOI.AC]DELETE(LIS)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABRMAAASJCAYAAABLtYu4AAAgAElEQVR4Xuzdf2xTd74n/PeqI/NsNB ...

  3. tp5链接访问

    方法名:admin/DayActive/statistic 访问:admin/day_active/statistic

  4. 查询yum包安装路径

    rpm -ql php71-php yum install json yum install libcurl

  5. JAVA对字符串的压缩与解压缩

    import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException; ...

  6. AJAX初尝试——ACM/ICPC类比赛气球管理系统

    很早之前做过一个,白板没界面,20秒暴力刷新,数据库每个team一个n列的对应n个题目的标记项,只能对单个比赛暴力把全部user_id导入单独的气球表(也就是cid=1000用这个表的话,cid100 ...

  7. Devexpress VCL Build v2013 vol 13.2.5 发布

    支持xe6 了,但是承诺的功能在哪里? What's New in 13.2.5 (VCL Product Line)   New Major Features in 13.2 What's New ...

  8. 二进制搭建kubernetes多master集群【四、配置k8s node】

    上一篇我们部署了kubernetes的master集群,参考:二进制搭建kubernetes多master集群[三.配置k8s master及高可用] 本文在以下主机上操作部署k8s node k8s ...

  9. 2018.09.25 codeforces1053E. Euler tour(并查集+st表+模拟)

    传送门 毒瘤细节题. 首先考虑不合法的情况. 先把相同的值配对,这样就构成了一些区间. 那么如果这些区间有相交的话,就不合法了. 如何判断?DZYO安利了一波st表,我觉得很不错. 接着考虑两个相同的 ...

  10. 2018.07.24 bzoj3531: [Sdoi2014]旅行(树链剖分+动态开点)

    传送门 树链剖分. 如何维护? 如果颜色少直接每种颜色一颗线段树走人. 但这题颜色数量不大于1e5" role="presentation" style="po ...