解题过程


中午吃饭比较晚,到机房lfw开始发各队的账号密码,byf开始读D题,shl电脑卡的要死,启动中...然后听到谁说A题过了好多,然后shl让blf读A题,A题blf一下就A了。然后lfw读完M题(shl的电脑终于打开了,然后输入密码,密码错误。。。自闭),说AC 自动机板题,然后找板子,,,突然发现自己读错题目。后来不知道怎么A的。shl copy了一遍密码终于登上账号。然后lfw一个人用单调栈和前缀和st表A掉了I题;byf 秒了H题;

shl和byf读j题,读完吧题意告诉lfw,lfw说水题,然后树链剖分加线段树离线就过了。同时byf在想K题,然后推出式子,利用前缀和就过了(听说好多对TLE了,应该没用前缀和维护);然后还有一个多小时,,,shl和byf看D题,lfw看C题,然后shl和byf没啥想法,lfw调C调了一万年,最后也没过。。。这场每一题都是一下就过了,罚时较少。(这场shl全场OB,没碰键盘,状态极差...)

C题要注意一下,java 的BigInteger运算比c++用数组模拟高精度快,lfw被卡住了,c++要几分钟预处理,java几乎1s出来,所以最后用java,但是看错题没看到要字典序最小,没时间改

第二天改好了,最后java也超时。。。要矩阵乘法预处理出28个数。。。


题解


先放代码,题解后面更新。

A. PERFECT NUMBER PROBLEM

#include<bits/stdc++.h>
using namespace std;
int main()
{printf("6\n");printf("28\n");printf("496\n");printf("8128\n");printf("33550336\n");return 0;
}

View Code

B. Greedy HOUHO

Unsolved.

C. Angry FFF Party

Unsolved.

lfw的题解链接 https://blog.csdn.net/liufengwei1/article/details/89522815

import java.lang.reflect.Array;
import java.util.*;
import java.math.*;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class Main
{public static BigInteger[][] multi(BigInteger [][]a,BigInteger [][]b){BigInteger [][]c= new BigInteger[3][3];for(int i=1;i<=2;i++)for(int j=1;j<=2;j++)c[i][j]=BigInteger.ZERO;for(int i=1;i<=2;i++)for(int j=1;j<=2;j++)for(int k=1;k<=2;k++) {c[i][k] = c[i][k].add(a[i][j].multiply(b[j][k]));}return c;}public static BigInteger qp(int b){BigInteger ans[][]=new BigInteger[3][3];BigInteger cnt[][]=new BigInteger[3][3];ans[1][1]=BigInteger.ONE;ans[1][2]=BigInteger.ZERO;ans[2][1]=BigInteger.ZERO;ans[2][2]=BigInteger.ONE;cnt[1][1]=BigInteger.ZERO;cnt[1][2]=BigInteger.ONE;cnt[2][1]=BigInteger.ONE;cnt[2][2]=BigInteger.ONE;while(b>0){if(b%2==1)ans=multi(ans,cnt);cnt=multi(cnt,cnt);b>>=1;}return ans[2][2];}public static void main(String args[]){int []f=new int [100];int []ans=new int[100];int up=0,cnt=3;f[1]=1;f[2]=1;for(int i=3;i<=28;i++)f[i] = f[i - 2] + f[i - 1];//PrintStream ps=new PrintStream("B.");BigInteger []num=new BigInteger[30];BigInteger a,b,w,sum=BigInteger.ZERO,tmp=BigInteger.ZERO;a=BigInteger.ONE;b=BigInteger.ONE;num[1]=BigInteger.ONE;num[2]=BigInteger.ONE;num[3]=BigInteger.ONE;Scanner input=new Scanner(System.in);int id=0;//System.out.println("a[1]=1;");//System.out.println("a[2]=1;");//System.out.println("a[3]=1;");id=4;for(int i=4;i<=28;i++)num[i]=qp(f[i]-1);int t,anscnt;t=input.nextInt();while(t>0){t--;sum=BigInteger.ZERO;w=input.nextBigInteger();anscnt=0;for(int i=28;i>=1;i--){tmp=sum.add(num[i]);if(tmp.compareTo(w)<=0) {sum = tmp;ans[++anscnt] = i;}}if(sum.equals(w)){if(ans[anscnt]==5){ans[anscnt]=1;ans[++anscnt]=2;ans[++anscnt]=3;ans[++anscnt]=4;}else if(ans[anscnt]==4){ans[anscnt]=1;ans[++anscnt]=2;}else if(ans[anscnt]==3){if(ans[anscnt-1]==4){ans[anscnt-1]=3;ans[anscnt]=1;ans[++anscnt]=2;}elseans[anscnt]=1;}else if(ans[anscnt]==2){if(ans[anscnt-1]==3){ans[anscnt - 1] = 1; ans[anscnt] = 2;}}Arrays.sort(ans,1,anscnt+1);for(int j=1;j<=anscnt;j++){if(j>1)System.out.print(" ");System.out.print(ans[j]);}System.out.println("");}elseSystem.out.println("-1");}}
}

View Code

D. Match Stick Game

Unsolved.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
const int num[10]={6,2,5,5,4,5,6,3,7,6};
ll f[2][15][75];
inline void init()
{for (int i=0;i<15;i++)for (int j=0;j<75;j++)f[1][i][j]=-1e10;//maxmemset(f[0],INF,sizeof(f[0]));//minf[0][0][0]=0;f[1][0][0]=0;for (int i=1;i<=10;i++)for (int j=1;j<=i*7;j++)for (int k=0;k<=9;k++){if(j<num[k]) continue;f[0][i][j]=min(f[0][i][j],f[0][i-1][j-num[k]]*10+k);f[1][i][j]=max(f[1][i][j],f[1][i-1][j-num[k]]*10+k);}
}
ll dp[105][705];
char s[105];
int nums[105];
int main()
{init();int T,n;scanf("%d",&T);while(T--){int tot=0;scanf("%d%s",&n,s);for(int i=0;i<=n;i++)for(int j=0;j<=n*7;j++)dp[i][j]=-1e12;//dao di i kuai haisheng j gen de maxint last=-1,cnt=0;for(int i=0;s[i];++i)//tongji mubang de  numbers
        {if(s[i]=='+'||s[i]=='-'){nums[cnt++]=i-last-1;last=i;}if(s[i]=='+') tot+=2;else if(s[i]=='-') tot+=1;else tot+=num[s[i]-'0'];}nums[cnt++]=strlen(s)-1-last;for(int i=1;i<=min(nums[0]*7,tot);++i)dp[0][tot-i]=max(dp[0][tot-i],f[1][nums[0]][i]);for(int i=1;i<cnt;++i)for(int j=0;j<=tot;++j)for(int k=2;k<=min(nums[i]*7+2,j);++k){dp[i][j-k]=max(dp[i][j-k],dp[i-1][j]-f[0][nums[i]][k-1]);//-dp[i][j-k]=max(dp[i][j-k],dp[i-1][j]+f[1][nums[i]][k-2]);//+
                }printf("%lld\n",dp[cnt-1][0]);}return 0;
}

View Code

E. Card Game

Unsolve.

F. Information Transmitting

Unsolved.

G. tsy's number

byf题解 南昌网络赛tsy's number(莫比乌斯反演&线性递推)

H. Coloring Game

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int quick_pow(int a,int b)
{int ans=1;while(b){if(b&1) ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}
int32_t main()
{int n;scanf("%lld",&n);if(n==1) {printf("1\n");return 0;}printf("%lld\n",2*2*quick_pow(3,n-2)%mod);return 0;
}

View Code

I. Max answer

#include<bits/stdc++.h>
#define maxl 500010
using namespace std;int n,top,lg;
long long ans=0;
long long s[maxl];
long long a[maxl],sum[maxl],dol[maxl],dor[maxl];
long long mini[20][maxl],mx[20][maxl];
map <long long,int> mp;
map <long long,int> :: iterator it;inline void prework()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i];top=0;int l=0,r=0;while(l<=n && r<=n){while(a[l]<=0 && l<=n)l++;if(a[l]>0){r=l;while(a[r+1]>0)r++;top=0;s[0]=l-1;for(int i=l;i<=r;i++){while(top>0 && a[i]<a[s[top]]){dor[s[top]]=i;top--;}s[++top]=i;dol[i]=s[top-1];}while(top>0)dor[s[top]]=r+1,top--;for(int i=l;i<=r;i++)ans=max(ans,(sum[dor[i]-1]-sum[dol[i]])*a[i]);}else r=l;l=r+1;}
}inline void mainwork()
{int lg=log2(n),t;for(int i=0;i<=n;i++)mx[0][i]=mini[0][i]=sum[i];for(int i=1;i<=lg;i++)for(int j=0;j<=n;j++){mx[i][j]=max(mx[i-1][j],mx[i-1][j+(1<<(i-1))]);mini[i][j]=min(mini[i-1][j],mini[i-1][j+(1<<(i-1))]);}long long mxx,mii;for(int i=1;i<=n;i++)if(a[i]<0){t=log2(i-0+1);mxx=max(mx[t][0],mx[t][i-(1<<t)+1]);t=log2(n-i+1);mii=min(mini[t][i],mini[t][n-(1<<t)+1]);ans=max((mii-mxx)*a[i],ans);}
}inline void print()
{printf("%lld",ans);
}int main()
{prework();mainwork();print();return 0;
}

View Code

J. Distance on the tree

#include<bits/stdc++.h>
#define maxl 200010
#define inf 2000000001
using namespace std;int n,nn,q,cnt=0,nodecnt=0,num=0;
int a[maxl],dep[maxl],tot[maxl],son[maxl],top[maxl],fa[maxl],ehead[maxl];
int idx[maxl],dy[maxl],ans[maxl];
struct ed
{int to,nxt;
}e[maxl<<1];
struct node
{int l,r,sum;
}tree[maxl<<2];
struct qu
{int u,v,w,id;
}que[maxl],edg[maxl<<1];
char ch[maxl];inline void adde(int u,int v)
{e[++cnt].to=v;e[cnt].nxt=ehead[u];ehead[u]=cnt;
}void dfs1(int u,int f)
{int v;dep[u]=dep[f]+1;fa[u]=f;tot[u]=1;for(int i=ehead[u];i;i=e[i].nxt){v=e[i].to;if(v==f) continue;dfs1(v,u);tot[u]+=tot[v];if(tot[v]>tot[son[u]])son[u]=v;}
}void dfs2(int u,int topf)
{int v;idx[u]=++nodecnt;dy[nodecnt]=u;top[u]=topf;if(!son[u]) return;dfs2(son[u],topf);for(int i=ehead[u];i;i=e[i].nxt){v=e[i].to;if(idx[v]) continue;dfs2(v,v);}
}void build(int k,int l,int r)
{tree[k].l=l;tree[k].r=r;if(l==r){tree[k].sum=0;return;}int mid=(l+r)>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);tree[k].sum=tree[k<<1].sum+tree[k<<1|1].sum;
}inline bool cmp(const qu &x,const qu &y)
{return x.w<y.w;
}inline void prework()
{scanf("%d%d",&n,&q);int u,v,w;num=n;nn=n;for(int i=1;i<=n-1;i++){scanf("%d%d%d",&u,&v,&w);num++;edg[i]=qu{u,v,w,num};adde(u,num);adde(num,v);adde(v,num);adde(num,u);}for(int i=1;i<=q;i++){scanf("%d%d%d",&que[i].u,&que[i].v,&que[i].w);que[i].id=i;;}sort(edg+1,edg+1+n-1,cmp);sort(que+1,que+1+q,cmp);n=num;dfs1(1,0);dfs2(1,1);build(1,1,n);
}void add(int k,int l)
{if(tree[k].l==tree[k].r){tree[k].sum++;return;}int mid=(tree[k].l+tree[k].r)>>1;if(l<=mid)add(k<<1,l);elseadd(k<<1|1,l);tree[k].sum=tree[k<<1].sum+tree[k<<1|1].sum;
}int getsum(int k,int l,int r)
{if(tree[k].l==l && tree[k].r==r)return tree[k].sum;int mid=(tree[k].l+tree[k].r)>>1;if(l>mid)return getsum(k<<1|1,l,r);elseif(r<=mid)return getsum(k<<1,l,r);elsereturn getsum(k<<1,l,mid)+getsum(k<<1|1,mid+1,r);
}inline int gettreesum(int x,int y)
{int ans=0;while(top[x]!=top[y]){if(dep[top[x]]<dep[top[y]]) swap(x,y);ans+=getsum(1,idx[top[x]],idx[x]);x=fa[top[x]];}if(dep[x]>dep[y]) swap(x,y);ans+=getsum(1,idx[x],idx[y]);return ans;//printf("%d\n",ans);
}inline void mainwork()
{//int x,y;/*scanf("%d",&q);for(int i=1;i<=q;i++){scanf("%s",ch);scanf("%d%d",&x,&y);if(ch[0]=='C'){a[x]=y;add(1,idx[x]);}else if(ch[1]=='S')gettreesum(x,y);elsegettreemax(x,y);}*/int edind=0;for(int i=1;i<=q;i++){while(edind<nn-1 && edg[edind+1].w<=que[i].w)++edind,add(1,idx[edg[edind].id]);ans[que[i].id]=gettreesum(que[i].u,que[i].v);}
}inline void print()
{for(int i=1;i<=q;i++)printf("%d\n",ans[i]);
}int main()
{prework();mainwork();print();return 0;
}

View Code

K. MORE XOR

#include<bits/stdc++.h>
using namespace std;
const int size=1e5+5;
#define int long long
int sum[4][size];
int arr[size];
int32_t main()
{int t;scanf("%lld",&t);int n;while(t--){scanf("%lld",&n);memset(sum,0,sizeof(sum));for(int i=1;i<=n;i++){scanf("%lld",&arr[i]);}for(int i=1;i<=n;i++){for(int j=0;j<=3;j++){sum[j][i]=sum[j][i-1];}sum[i%4][i]=sum[i%4][i]^arr[i];}int q;scanf("%lld",&q);int l,r;while(q--){scanf("%lld%lld",&l,&r);int len=r-l+1;if(len%4==0) printf("0\n");else if(len%4==1){int b=l%4;printf("%lld\n",sum[b][l-1]^sum[b][r]);}else if(len%4==2){int b=l%4,c=(l+1)%4;printf("%lld\n",sum[b][l-1]^sum[b][r]^sum[c][l-1]^sum[c][r]);}else if(len%4==3){int c=(l+1)%4;printf("%lld\n",sum[c][l-1]^sum[c][r]);}}}return 0;
}

View Code

L. qiqi'tree

Unsolved.

M. Subsequence

#include<bits/stdc++.h>
#define maxl 100010int slen,tlen,n;
int nxt[maxl][27];
int nxtind[27];
char s[maxl],t[maxl];inline void prework()
{scanf("%s",s+1);slen=strlen(s+1);for(int i=0;i<26;i++)nxtind[i]=maxl-1;for(int i=slen;i>=1;i--){for(int j=0;j<26;j++)nxt[i][j]=nxtind[j];nxtind[s[i]-'a']=i;}for(int j=0;j<26;j++)nxt[0][j]=nxtind[j];
}inline bool check()
{tlen=strlen(t+1);int u=0;for(int i=1;i<=tlen;i++){u=nxt[u][t[i]-'a'];if(u==0 || u>slen)return false;}return true;
}inline void mainwork()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s",t+1);if(check())puts("YES");else    puts("NO");    }
}int main()
{prework();mainwork();return 0;
}

View Code

shl聚菜。%lfw.%byf.

转载于:https://www.cnblogs.com/songorz/p/10743353.html

2019 ICPC南昌邀请赛网络赛比赛过程及题解相关推荐

  1. 2019 ICPC南昌邀请赛比赛游记 队伍名:莫比乌斯

    南昌队伍是学长临时组的 飞的那天和学长们坐 6.1的飞机 川航还发了棒棒糖 下飞机就落在了座位上了 然后难道大暴雨 我鞋子都湿了 我们和学长去了酒店 酒店是很有情趣味道 滑稽 于是拍下了学长的背影 学 ...

  2. 【计蒜客 - 2019南昌邀请赛网络赛 - I】Max answer(单调栈,RMQ)

    题干: Alice has a magic array. She suggests that the value of a interval is equal to the sum of the va ...

  3. 【计蒜客 - 2019南昌邀请赛网络赛 - H】Coloring Game(找规律,思维dp)

    题干: David has a white board with 2 \times N2×N grids.He decides to paint some grids black with his b ...

  4. 【计蒜客 - 2019南昌邀请赛网络赛 - M】Subsequence(字典树,dp预处理)

    题干: Give a string SS and NN string T_iTi​ , determine whether T_iTi​ is a subsequence of SS. If ti i ...

  5. 【计蒜客 - 2019南昌邀请赛网络赛 - K】MORE XOR(数学,找规律,打表)

    Given a sequence of nn numbers a_1, a_2, \cdots, a_na1​,a2​,⋯,an​ and three functions. Define a func ...

  6. 2019南昌邀请赛网络赛

      A. PERFECT NUMBER PROBLEM 这题没什么要说的. #include<bits/stdc++.h>using namespace std;int main(){co ...

  7. 2019 icpc南昌邀请赛 G Winner

    题目链接:https://nanti.jisuanke.com/t/40259 Ichuan really likes to play games, so he organized a game co ...

  8. 2019 icpc徐州区域网络赛题解09.07

    A题: 链接:https://nanti.jisuanke.com/t/41383 思路:模型是经典常见的斐波拉契博弈模型,套上一个java大数的扩展中国剩余定理即可. 扩展中国剩余定理解出方程,判断 ...

  9. 南昌邀请赛网络赛 G. tsy's number(莫比乌斯反演+线性筛)

    题目链接: tsy's number 题意: 求    (mod ) 思路: 原式 =  设   设  原式 =  设T = id ,将 i 的求和变为 T 的求和: 原式 =   :这个是 与  的 ...

最新文章

  1. 分享几个vs code 的几个插件
  2. 树形DP题目。。。转载
  3. tcpdump软件使用
  4. 各种类型Android源代码
  5. Git之删除本地无用分支
  6. 如何自定义Struts2表单验证后的错误信息显示格式
  7. 旋转成分矩阵结果分析_30分钟学会PCA主成分分析
  8. 墙面有几种装修方法_新家装修时,家里墙面漏水了怎么办?三种方法解决不乱花钱...
  9. hive 安装centos7
  10. 关于图灵机的三个问题
  11. 美团2015校园招聘笔试题
  12. 蓝桥杯java历年真题及答案整理21~40
  13. K核苷酸频率(KNF,k-nucleotide frequencies)或K-mer频率
  14. 端口汇聚实现多端口带宽叠加
  15. mysql星期几转为英文_MySQL如何获取一个指定日期所对应的的星期几(英文星期信息-dayname函数)呢?...
  16. 订单可视化2实战-生产交付流程(流程再造核心区)
  17. mongo 登陆_MongoDB 账号密码登录
  18. linux系统停留在登入界面,登入失败问题
  19. LU分解求线性方程组的解
  20. 查找文献必备的文献下载神器

热门文章

  1. qemu中的新版vga仿真
  2. 西门子PLC通过PROFINET控制其他厂商变频器
  3. Cisco跨站请求伪造漏洞
  4. 【STM32】RTC休眠唤醒(停机模式)、独立看门狗开启状态下
  5. IBM SPSS Statistics如何添加数值标签
  6. Python数据处理——平均数、中位数、标准差、极差
  7. 智能聊天机器人小黄鸡
  8. 计算机网络——数据报与虚电路
  9. JavaWeb学习记录 JspSmartUpload应用
  10. 系统分析与设计大作业实验报告