写个博客总是符合要求的对吧

回来以后第一次悄悄参加考试,昨天全程围观…

然后喜提爆炸120分wwwwwwwww

T1用了全机房最慢的写法,导致改掉死循环T掉的一个点以后还是死活过不了最后一个点。T2全世界都会DP只有我没做过关路灯也现场推不出来我不如原地爆炸死得干脆一点还非要DFs骗个40分。T3浪费两个小时,考后不甘心地尝试理解题解和std然后死得如烟花一般惨淡。

哇,墨雨笙今天的洛谷运势,大凶。

T1引子:

引子,作用是引出全文,交代背景,balabalabala…=开局爆炸。

已经不是细节爆炸的问题了,我整个代码的处理都很笨,代码不长但跑得奇慢,就是龟兔赛跑里那一粒尘埃。

90pts知道其他人的解法以后懒得改了。

大模拟没什么好说的…注意细节和写法吧。

#include<iostream>
#include<cstdio>
using namespace std;
int n,m,flag,x1,y1,x2,y2,fx;
int a[][][],b[][],cnt,p[],sum;
char s[][];
void dfs(int x){
p[++sum]=x;
for(int i=;i<=a[x][][];i++){
int num=;
int x3=a[x][i][],y3=a[x][i][];
fx=(s[x3][y3-]=='|'?:-);
flag=;
while(!flag){
while(s[x3][y3]=='-'){
y3+=fx;
}
while(s[x3][y3]=='|'){
x3++;
}
if(s[x3][y3]=='+'){
if(s[x3-][y3]=='|'){
if(s[x3][y3-]=='-'){
fx=-;
y3=y3-;
}
else{
fx=;
y3=y3+;
}
}
else{
x3++;
}
}
else flag=;
}
int x4=x3,y4=y3;
while(s[x4][y4]!='+'){
y4--;
}
int y5=y3;
while(s[x4][y5]!='+'){
y5++;
}
for(int k=x3+;k<=n;k++){
for(int l=y4+;l<=y5-;l++){
if(''<=s[k][l]&&s[k][l]<=''){
int l1=l;
num=s[k][l]-'';
while(''<=s[k][l1+]&&s[k][l1+]<=''){
num*=;
num+=s[k][l1+]-'';
l1++;
}
break;
}
}
if(num)break;
}
dfs(num);
}
}
int main()
{
// freopen("2.in","r",stdin);
// freopen("2.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%s",s[i]+);
}
for(int i=;i<=n;i++){
flag=;
for(int j=;j<=m;j++){
if(s[i][j]=='+'){
if(!flag&&s[i][j+]=='-'){
x1=i,y1=j;
flag=;
}
else if(flag&&s[i][j+]=='-'){
x1=i,y1=j;
flag=;
}
else if(s[i][j+]!='-'&&flag){
cnt=;
x2=i,y2=j;
flag=;
while(s[x1+][y1]=='|'&&s[x1+][y2]=='|'){
x1++;
x2++;
if(s[x1][y1-]=='-'){
b[++cnt][]=x1;
b[cnt][]=y1-;
}
if(s[x2][y2+]=='-'){
b[++cnt][]=x2;
b[cnt][]=y2+;
}
}
if(x1!=i){
for(int k=i+;k<=x1;k++){
for(int l=y1+;l<=y2-;l++){
if(''<=s[k][l]&&s[k][l]<=''){
int l1=l;
int num=;
num=s[k][l]-'';
while(''<=s[k][l1+]&&s[k][l1+]<=''){
num*=;
num+=s[k][l1+]-'';
l1++;
}
for(int k=;k<=cnt;k++){
a[num][k][]=b[k][];
a[num][k][]=b[k][];
a[num][][]++;
}
// printf(" %d\n",num);
break;
}
}
}
}
}
}
}
}
dfs();
for(int i=sum;i>=;i--){
printf("%d\n",p[i]);
}
return ;
}

T2可爱精灵宝贝:

全世界都会区间DP

哦不对,是我DP不好,数学不好,字符串不好,数据结构也不好…对不起,我是个垃圾,什么都不好。

几乎是对着正解改,然后又去补习了关路灯,好在关路灯自己写出来了。然后疯了一样理解套路和差异,两道题为什么维度不一样循环层数不一样。

关路灯只用考虑路程和全局除了一段区间以外的贡献值,精灵宝贝这道题的贡献则要受时间限制,通过时间而不是路程计算…当然和路程也有关系。

这种可以往返策略的最优解,一般都是从一个点向外扩展慢慢推出去,大的范围包括小范围并由其推出。可以用区间DP来做,每一次只多拓展1,小区间最优一定会推出大区间最优。一个区间由另一个区间推过来的时候要考虑怎么转移,发现如果记下了是在小区间的哪个端点就可以轻松转移大区间了,这样也决策了是不是要折返。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,k,m,maxt;
int f[][][],g[][][],begin,ans;
struct node{
int a,b,t;
}c[];
bool cmp(node a,node b){
if(a.a<b.a)return true;
else return false;
}
int main(){
scanf("%d%d%d",&n,&k,&m);
for(int i=;i<=m;i++){
scanf("%d%d%d",&c[i].a,&c[i].b,&c[i].t);
maxt=max(maxt,c[i].t);
}
c[].a=k,c[].b=,c[].t=;
sort(c,c+m+,cmp);
for(int i=;i<=m;i++){
if(c[i].a==k&&c[i].t==){
begin=i;
break;
}
}
memset(f,-,sizeof(f));
memset(g,-,sizeof(g));
f[begin][begin][]=g[begin][begin][]=;
for(int t=;t<=maxt;t++){
for(int i=begin;i>=;i--){
for(int j=begin;j<=m;j++){
if(i>){
f[i-][j][t+c[i].a-c[i-].a]=max(f[i-][j][t+c[i].a-c[i-].a],f[i][j][t]+(c[i-].t>=t+c[i].a-c[i-].a?c[i-].b:));
f[i-][j][t+c[j].a-c[i-].a]=max(f[i-][j][t+c[j].a-c[i-].a],g[i][j][t]+(c[i-].t>=t+c[j].a-c[i-].a?c[i-].b:));
}
if(j<m){
g[i][j+][t+c[j+].a-c[j].a]=max(g[i][j+][t+c[j+].a-c[j].a],g[i][j][t]+(c[j+].t>=t+c[j+].a-c[j].a?c[j+].b:));
g[i][j+][t+c[j+].a-c[i].a]=max(g[i][j+][t+c[j+].a-c[i].a],f[i][j][t]+(c[j+].t>=t+c[j+].a-c[i].a?c[j+].b:));
}
}
}
}
for(int t=;t<=maxt;t++){
for(int i=begin;i>=;i--){
for(int j=begin;j<=m;j++){
ans=max(f[i][j][t],ans);
ans=max(g[i][j][t],ans);
}
}
}
printf("%d",ans);
return ;
}

听说还可以搜索+神仙剪枝,可惜我不会

T3相互再归的鹅妈妈:

诸君,我喜欢鹅妈妈童谣

浪费了两个小时,推了一堆没什么用的性质,并且没看见n=1以及n=2的20分骗分。最后居然打了个爆炸DP拿了5pts,第一次交还是个mle,快乐得很。发觉自己数学过差抱着死扛到底的心态去钻研题解,最后弄懂了有序情况下任选可重复的i个人异或起来为0的式子是什么意思,然后不负期望死在斯特林反演。

唉我说,浪费时间干什么啊墨雨笙,一开始就该意识到没什么意义并且自己能力不够啊hhh

神仙题,大致说说自己对看懂部分的理解。

w[i]是预处理R从低位到高位,到这一位的数的值。例如R=1101(2),w[1]=1,w[2]=1,w[3]=5,w[4]=13。然后处理出p2[i][j]表示2i的j次方也就是2i*j,处理出pw[i][j]是R这个数到i这一位数值的j次方,也就是w[i]的j次方。

然后从高位往地位扫,遇到这一位为1就像题解说的那样,这一位可以【解放】,在i位之前这个数和R相同,这一位R为1而这个数为0,那么其他的数可以随便填只有唯一一种方案能异或出0【这里其实有点不明白,感性理解了】。然后根据这一位去算g[j](g[j]即选出j个数异或和为0)。如果当前是最高位的1或者j为偶数【这里也有点不明白】,那么枚举k,g[j]+=C[j][k](j个人里选k个)*pw[i+1][k](后面乱填的数有w[i]种选择,k个人)*p2[m-i][j-k-1](i前面有这么多可能的取值,剩余的人【这里依然有疑问】)。

这样糊里糊涂地算出来数字可以重复的g数组以后根据斯特林反演就能推出不允许重复的f数组(f[i]=选出i个人异或和为0切不允许数字重复)。由于题目要求无序方案(选出来的数相同就算同一种方案),目前算出来的是有序方案(选出来的数顺序不同就算不同方案),所以还要除掉一个n!,就是一个排列数。

没有代码,扔个std。感觉我在网上找到的std比下发的std好理解。

#include<iostream>
#include<cstdio>
#include<cstring>
#define M 5000010
#define N 8
#define ll long long
#define up(x,y) x=(x+(y))%mod
using namespace std;
const int mod=;
int n,m,K,w[M],p2[M][N],pw[M][N];
ll g[N],C[N][N],f[N],fac[N],ans;
char s[];
bool a[M];
ll ksm(ll a,ll b)
{
ll r=;
for(;b;b>>=,a=a*a%mod)
if(b&) r=r*a%mod;
return r;
}
void find(int num,int v)
{
if(v>n)
{
ll c=,cnt=;
for(int i=;i<=num;i++)
c=c*fac[f[i]-]*((f[i]&)?:-)%mod;
for(int i=;i<=num;i++)
if(f[i]&) cnt++;
else c=c*w[]%mod;
up(ans,c*g[cnt]);
return ;
}
for(int i=;i<=num+;i++)
f[i]++,find(max(num,i),v+),f[i]--;
}
int main()
{
scanf("%d%d%s",&n,&K,s+);
m=strlen(s+);
for(int i=;i<K;i++)
for(int j=;j<=m;j++)
a[i*m+j]=s[j]-'';
m*=K;
for(int i=m,mi=;i;i--,mi=(mi<<)%mod)
w[i]=(w[i+]+mi*a[i])%mod;
fac[]=;
for(int i=;i<=n;i++)
fac[i]=fac[i-]*i%mod;
C[][]=;
for(int i=;i<=n;C[i][]=,i++)
for(int j=;j<=i;j++)
C[i][j]=(C[i-][j]+C[i-][j-])%mod;
bool flag=;
g[]=;
for(int i=,tmp=;i<=m+;i++,tmp=(tmp<<)%mod)
{
p2[i][]=pw[i][]=;
for(int j=;j<=n;j++)
p2[i][j]=(ll)tmp*p2[i][j-]%mod,pw[i][j]=(ll)w[i]*pw[i][j-]%mod;
}
for(int i=;i<=m;flag|=a[i],i++)
if(a[i])
for(int j=;j<=n;j++)
if(!flag||!(j&))
for(int k=;k<=((j-)>>);k++)
up(g[j],C[j][k<<]*pw[i+][k<<]%mod*p2[m-i][j-(k<<)-]); find(,);
printf("%lld",(ans+mod)*ksm(fac[n],mod-)%mod); return ;
}

又是日常爆炸的一天,我倒是挺明白自己很垃圾并且总是无意义浪费时间折腾没用的东西的hhh我也知道自己很没用,所以甚至不敢再去多问别人什么东西引起厌恶了。感觉再稍微多说两句话,别人就都知道我是个什么玩意儿唯恐避之不及。

虽然那样也挺正常的就是了。

2019.8.12 NOIP模拟测试18 反思总结的更多相关文章

  1. 2019.8.1 NOIP模拟测试11 反思总结

    延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...

  2. 2019.8.14 NOIP模拟测试21 反思总结

    模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...

  3. 2019.8.9 NOIP模拟测试15 反思总结

    日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对 ...

  4. 2019.7.29 NOIP模拟测试10 反思总结【T2补全】

    这次意外考得不错…但是并没有太多厉害的地方,因为我只是打满了暴力[还没去推T3] 第一题折腾了一个小时,看了看时间先去写第二题了.第二题尝试了半天还是只写了三十分的暴力,然后看到第三题是期望,本能排斥 ...

  5. 2019.8.10 NOIP模拟测试16 反思总结【基本更新完毕忽视咕咕咕】

    一如既往先放代码,我还没开始改… 改完T1滚过来了,先把T1T2的题解写了[颓博客啊] 今天下午就要走了,没想到还有送行的饯别礼,真是欣喜万分[并没有] 早上刚码完前面的总结,带着不怎么有希望的心情开 ...

  6. 2019.7.27 NOIP模拟测试9 反思总结

    先来整理题目 T1题目大意:给出n个数字和一个质数作为模数,一个变量x初始值为1.进行m次操作,每次让x随机乘上n个数中的一个,问m次操作以后x的期望值. 答案一定可以用分数表示,输出分子乘分母逆元的 ...

  7. 2019.8.13 NOIP模拟测试19 反思总结

    最早写博客的一次∑ 听说等会儿还要考试[真就两天三考啊],教练催我们写博客… 大约是出题最友好的一次[虽然我还是炸了],并且数据也非常水…忽视第三题的锅的话的确可以这么说.但是T3数据出锅就是你的错了 ...

  8. 2019.8.7 NOIP模拟测试14 反思总结

    先扔代码 调完自闭网络流了,新一轮考试前看看能不能赶完…… 考得极其爆炸,心态也极其爆炸,真的是认识到自己能力上的不足 思维跑偏,代码能力差 就这样吧,再努力努力,不行就AFO T1旋转子段: 因为我 ...

  9. 2019.8.5 NOIP模拟测试13 反思总结【已更新完毕】

    还没改完题,先留个坑. 放一下AC了的代码,其他东西之后说… 改完了 快下课了先扔代码 跑了跑了 思路慢慢写 来补完了[x 刚刚才发现自己打错了标题 这次考试挺爆炸的XD除了T3老老实实打暴力拿了52 ...

随机推荐

  1. canvas石英钟

    canvas石英钟:demo <!DOCTYPE html> <html> <head lang="en"> <meta charset= ...

  2. 洛谷P1291 [SHOI2002]百事世界杯之旅

    题目链接: kma 题目分析: 收集邮票的弱弱弱弱化版,因为是期望,考虑倒推 设\(f[i]\)表示现在已经买齐了\(i\)种,距离买完它的剩余期望次数 那么下一次抽有\(\frac{i}{n}\)的 ...

  3. 重磅榜单!互联网金融Top100总估值超1.1万亿,27家独角兽上榜!

    时隔4个月,爱分析的“中国互联网金融企业估值排行榜”更新了! 在这4个月当中,我们调研了数十位企业创始人.专业投资人以及资深行业专家,尤其针对金服集团.消费金融.财富管理.征信等领域进行了深入研究.因 ...

  4. WhaleCTF之隐写-Find

    WhaleCTF之隐写-Find 前往题目 图片保存到本地,用Stegsolve打开图片 找到二维码 用微信或qq扫描,得到flag~

  5. 《DSP using MATLAB》Problem 8.14

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  6. LinkedList集合 实现栈和队列

    LinkedList集合的底层是链表结构实现的,所以可以模拟栈(先进后出)和队列(先进先出). 方法: addFirst() //添加元素到列表的起始位置 addLast() //添加元素到列表的结束 ...

  7. Python学习day45-数据库(总结)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  8. 让ASPX页面可以提交html标签代码的配置

    1:打开web.config文件,在system.web节点里,添加<httpRuntime requestValidationMode="2.0" /> 2:在asp ...

  9. INI文件读写类

    public class INIClass { public string inipath; [DllImport("kernel32")] private static exte ...

  10. nowcoder牛客wannafly挑战赛20

    A---染色 签到题,设最终颜色为x,一次操作就需要把一个不是x的点变为x,所以最终颜色为x时需要操作 总结点个数-颜色为x的节点个数,然后枚举所有颜色就行了 #include <iostrea ...