100 + 30 + 0

T1 叉叉

题目描述

现在有一个字符串,每个字母出现的次数均为偶数。
接下来我们把第一次出现的字母a和第二次出现的a
连一条线,第三次出现的和四次出现的字母a连一条线,
第五次出现的和六次出现的字母a连一条线..
.对其他25个字母也做同样的操作。
现在我们想知道有多少对连线交叉。
交叉的定义为一个连线的端点在另外一个连线的内部,
另外一个端点在外部。
下图是一个例子,共有三对连线交叉(我们连线的时候,只能从字符串上方经过)。

输入输出格式

输入格式:

一行一个字符串。保证字符串均由小写字母组成,且每个字母出现次数为偶数次。

输出格式:

一个整数,表示答案。

输入输出样例

输入样例#1:

abaazooabz

输出样例#1:

3

说明

对于30% 的数据,字符串长度不超过50。
对于100% 的数据,字符串长度不超过100,000。

嗯,我用树状数组做的,把每个区间起点设为1,终点设为-1,每次统计区间和,并在区间右端点处+1

链表+前缀和O(26n)

吐槽此题数据太弱,On^2做法都能A,学校电脑啥时候跑这么快了啊

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. #define lowbit(x) x&(-x)
  6. const int maxn =;
  7. char a[maxn];int n,t[maxn];
  8. int num[maxn];
  9. struct node{
  10. int l,r;
  11. }edge[maxn];
  12. int pre[maxn],sum[maxn];
  13. void update(int x,int v){
  14. while (x<=n){
  15. sum[x]+=v;
  16. x+=lowbit(x);
  17. }
  18. }
  19. int query(int x){
  20. int ans = ;
  21. while(x){
  22. ans+=sum[x];
  23. x-=lowbit(x);
  24. }
  25. return ans;
  26. }
  27. int main (){
  28. scanf("%s",a+);
  29. n=strlen(a+);int cnt=;
  30. for(int i=;i<=n;++i) {
  31. t[i]=a[i]-'a';
  32. if(num[t[i]]%==)update(i,-),edge[pre[t[i]]].r=i,num[t[i]]++;
  33. else update(i,),edge[++cnt].l=i,pre[t[i]]=cnt,num[t[i]]++;
  34. }
  35. int ans=;
  36. for(int i=;i<=cnt;i++) {
  37. int l=edge[i].l,r=edge[i].r;
  38. ans+=query(r-)-query(l);update(r,);
  39. }
  40. printf("%d\n",ans);
  41. return ;
  42. }

T1

U14261 跳跳虎回家

题目描述

跳跳虎在外⾯出去玩忘了时间,现在他需要在最短的时间内赶回家。
跳跳虎所在的世界可以抽象成⼀个含有 个点的图(点编号从 到 ),跳跳虎现在在 号点,跳跳虎的家在 号点。
图上⼀共有 条单向边,通过每条边有固定的时间花费。
同时,还存在若⼲个单向传送通道,传送通道也有其时间花费。
传送通道⼀般来说⽐普通的道路更快,但是跳跳虎最多只能使⽤ 次。
跳跳虎想知道他回到家的最⼩时间消耗是多少。

输入输出格式

输入格式:

第一行4个整数n,m,q,k
( n表示点数,m表示普通道路的数量, q表示传送通道的数量,k表示跳跳虎最多使k次传送通道)
接下来 n行每3 个整数a,b,c ,表示有1条从a到b,时间花费为c的普通道路
接下来 q每3个整数a,b,c,表示有1条从a到b,时间花费为c的传送道路
输出格式:
输出一行1个整数表示最少时间消耗,如果没法回到家输出-1。

输入输出样例

输入样例#1:

5 5 2 1
1 2 1
1 3 2
2 4 2
3 4 3
4 5 4
1 4 1
2 5 1

输出样例#1:

2

说明

对于30%的数据, 1 ≤ n ≤ 500,0 ≤ m,q ≤ 2000,k = 0
对于另外30%的数据, 1 ≤ n ≤ 500,0 ≤ m,q ≤ 2000,k = 1
对于100%的数据 1 ≤ n ≤ 500,0 ≤ m,q ≤ 2000,0 ≤ k ≤ 

首先k是骗人的,其次spfa瞎搞就水过去了.....吐槽此题数据太弱,spfa出队时让连向节点出队都过了....

然而我非常BS的吧s和q输反了,然后就03了

T

  1. #include<queue>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. const int maxn = ;
  6. struct node{
  7. int u,v,w,next;
  8. bool flag;
  9. }edge[maxn];
  10. struct Node{
  11. int x,k;
  12. }cur,nxt;
  13. int head[maxn],cnt;
  14. int k;
  15. void add_edge(int u,int v,int w,bool flag) {
  16. edge[++cnt].v=v,edge[cnt].w=w,edge[cnt].next=head[u],head[u]=cnt;
  17. }
  18. queue<Node>q;
  19. int n,m;
  20. int dis[maxn][maxn];
  21. bool vis[maxn][maxn];
  22. bool spfa() {
  23. memset(dis,0x3f,sizeof(dis));
  24. dis[][]=;vis[][]=true;
  25. cur.x=,cur.k=;
  26. q.push(cur);
  27. while(!q.empty()) {
  28. cur=q.front();
  29. q.pop();
  30. int u=cur.x,kk=cur.k;
  31. for(int i=head[u];i;i=edge[i].next) {
  32. int v=edge[i].v;
  33. if(edge[i].flag) {
  34. if(kk<k&&dis[v][kk+]>dis[u][kk]+edge[i].w) {
  35. dis[v][kk+]=dis[u][kk]+edge[i].w;
  36. if(!vis[v][kk+]) {
  37. nxt.k=kk+;nxt.x=v;
  38. q.push(nxt);
  39. vis[v][kk+]=true;
  40. }
  41. }
  42. } else {
  43. if(dis[v][kk]>dis[u][kk]+edge[i].w) {
  44. dis[v][kk]=dis[u][kk]+edge[i].w;
  45. if(!vis[v][kk]) {
  46. nxt.x=v,nxt.k=kk;
  47. q.push(nxt);
  48. vis[v][kk]=true;
  49. }
  50. }
  51. }
  52. vis[u][kk]=;
  53. }
  54. }
  55. int ans=0x7fffffff;
  56. for(int i=;i<=k;i++)
  57. ans=min(ans,dis[n][i]);
  58. if(ans==0x3f3f3f3f)return -;
  59. else return ans;
  60. }
  61. int main() {
  62. // freopen("move.in","r",stdin);
  63. // freopen("move.out","w",stdout);
  64. int qq;
  65. scanf("%d%d%d%d",&n,&m,&qq,&k);
  66. if(k>qq) k=qq;
  67. for(int u,v,w,i=;i<=m;i++) {
  68. scanf("%d%d%d",&u,&v,&w);
  69. add_edge(u,v,w,);
  70. }
  71. for(int u,v,w,i=;i<=qq;i++) {
  72. scanf("%d%d%d",&u,&v,&w);
  73. add_edge(u,v,w,);
  74. }
  75. printf("%d\n",spfa());
  76. return ;
  77. }

2

U14263 秀秀和哺噜国(cut)

题目描述

哺噜国里有!个城市,有的城市之间有高速公路相连。在最开始时,哺噜国里有n− 条高
速公路,且任意两座城市之间都存在一条由高速公路组成的通路。
由于高速公路的维护成本很高, 为了减少哺噜国的财政支出,将更多的钱用来哺育小哺噜,
秀秀女王决定关闭一些高速公路。 但是为了保证哺噜国居民的正常生活,
不能关闭太多的高速公路,要保证每个城市通过高速公路与至少$个城市(包括自己)相连。

在得到了秀秀女王的指令后,交通部长华华决定先进行预调研。
华华想知道在满足每个城市都可以与至少$个城市相连的前提下,
有多少种关闭高速公路的方案(可以一条也不关) 。两种方案不同,
当且仅当存在一条高速公路在一个方案中被关闭,
而在另外一个方案中没有被关闭。 由于方案数可能很大,
你只需输出不同方案数对786433取模后的结果即可。
其中786433 =
6×217+ 1。

输入输出格式

输入格式:

从文件cut.in 中读入数据。
输入第一行,包含两个正整数n,k。
接下来的n − 1行,每行包含两个正整数a和b,
表示城市a和城市b之间有一条高速公路相
连。

输出格式:

输出文件到cut.out 中。
输出一个非负整数,表示所求方案数对786433 取模后的结果。

输入输出样例

输入样例#1:

5 2
1 2
2 3
3 4
4 5

输出样例#1:

3

【样例 1 解释】

三种方案分别为:
一条高速公路也不关闭;
关闭城市2和城市3之间的高速公路;
关闭城市3和城市4之间的高速公路。

输入样例#2:

10 2
1 2
1 3
2 4
2 5
3 6
3 7
3 10
5 8
6 9

输出样例#2:

12

【子任务】

对于20%的数据:! ≤ 20;
另有30%的数据:! ≤ 100;
另有10%的数据:≤100;另有20对于100 ≤ !。

说明

空间限制:512M

推出dp不敢写,orz认为自己写不出来,然后就没写,然后xxy讲了怎么写,然后就写了,然后就没有然后了

然后这题需要开long long or 快速乘 然而51nod卡内存,所以只能写快速乘,然而今天模拟赛不卡!!

dp[i][j]表示以i为根且当前联通块大小为k的方案总数,特别的,

dp[i][0]表示割点当前点与其父亲是棵平衡树的方案总数。

对于u的一个孩子v可以得到转移方程dp[u][j+k]=dp[u][j]*dp[v][k]

另外dp[u][0]=Σdp[u][j](j>=题目给定的k)

复杂度On^3,每次dp时,只枚举当前u所在子树的大小,

每当枚举到它的其中孩子时,当前u所在子树的大小加上它孩子为根的子树的大小。

可以理解为每一个点对只被枚举到一次,然后复杂度就编程On^2了。

最后答案即为dp[1][0]

  1. #include<cstdio>
  2. #include<cstdlib>
  3. using namespace std;
  4. #define LL long long
  5. #define maxn 5007
  6. #define mod 1000000007
  7. int kkk,n;
  8. int head[maxn],num,dp[maxn][maxn],size[maxn],tmp[maxn];
  9. struct node{
  10. int v,next;
  11. }edge[maxn<<];
  12. inline void add_edge(int u,int v) {
  13. edge[++num].v=v;edge[num].next=head[u];head[u]=num;
  14. }
  15.  
  16. void dfs(int x,int f) {
  17. size[x]++;dp[x][]=;
  18. for(int i=head[x];i;i=edge[i].next) {
  19. int v=edge[i].v;
  20. if(v==f)continue;
  21. dfs(v,x);
  22. for(int j=;j<=size[x]+size[v];++j)tmp[j]=;
  23. for(int j=;j<=size[x];++j)tmp[j]=(dp[v][]%mod*dp[x][j]%mod)%mod;
  24. for(int j=;j<=size[x];++j)
  25. for(int k=;k<=size[v];++k) {
  26. tmp[j+k]=(tmp[j+k]+dp[x][j]*dp[v][k]%mod)%mod;
  27. }
  28. for(int j=;j<=size[x]+size[v];++j)dp[x][j]=tmp[j];
  29. size[x]+=size[v];
  30. }
  31. for(int i=kkk;i<=size[x];i++)dp[x][]=(dp[x][]+dp[x][i])%mod;
  32. }
  33. int main () {
  34. // freopen("cut.in","r",stdin);
  35. // freopen("cut.out","w",stdout);
  36. scanf("%d%d",&n,&kkk);
  37. for(int u,v,i=;i<n;i++) {
  38. scanf("%d%d",&u,&v);
  39. add_edge(u,v);
  40. add_edge(v,u);
  41. }
  42. dfs(,);
  43. printf("%d\n",dp[][]%mod);
  44. return ;
  45. }

T3

模拟赛QAQ的更多相关文章

  1. NOIp模拟赛二十九

    又是受虐的一天呢~接下来四天都要打模拟赛QAQ 今日分数:0(100)+100+0=100 A题O(读入)结论题判断结果时没return 0被subtask卡成0分,喜提fstQAQ,B题DP,C题不 ...

  2. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  3. PKUSC 模拟赛 day1 下午总结

    下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...

  4. [GRYZ]寒假模拟赛

    写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...

  5. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

  6. ATP学姐的模拟赛

    ATPの水题大赛 声明:不是我觉得这题水,这就是本场模拟赛的名称. T1:求所有的$n$位数中有几个数满足:每一位要么是$A$要么是$B$,并且这个$n$位数的每一位加起来是$A$或$B$的倍数. $ ...

  7. NOIp2017真题模拟赛 By cellur925

    果然我还是最菜的==不接受反驳 (先考了day2喵喵喵) Day2 T1:奶酪 期望得分:100分 实际得分:100分 考察:并查集 思路:这题其实之前做过了==.思路还是比较清晰的,读入时预处理出可 ...

  8. [NOIP2018模拟赛10.25]瞎搞报告

    闲扯 最近有点颓,都修到好晚,早上起来和吔shi一样难受 忍着困意把题面看完,发现啥也不会,又是一场写暴力的模拟赛 T1发现似乎可以DP,顺手码了个 T2像个最小瓶颈路板子,但是只做过N^2算法的.. ...

  9. [NOIP10.6模拟赛]2.equation题解--DFS序+线段树

    题目链接: 咕 闲扯: 终于在集训中敲出正解(虽然与正解不完全相同),开心QAQ 首先比较巧,这题是\(Ebola\)出的一场模拟赛的一道题的树上强化版,当时还口胡出了那题的题解 然而考场上只得了86 ...

随机推荐

  1. [Tkinter 教程] 布局管理 (Pack Place Grid)

    原系列地址: Python Tkinter 简介: 本文讲述如何使用 tkinter 的布局管理 (被称作 layout managers 或 geometry managers). tkinter ...

  2. ios之UITextView

    我们计划创建UITextView,实现UITextViewDelegate协议方法,使用NSLog检查该方法何时被调用.我们还会接触到如何在TextView中限制字符的数量,以及如何使用return键 ...

  3. 697. Degree of an Array@python

    Given a non-empty array of non-negative integers nums, the degree of this array is defined as the ma ...

  4. vs code背景图片的设置

    使用vs code编辑器的时候,每次看到黑色的背景,会感觉到很大的视觉疲劳,今天来换换背景来看下效果 你需要安装的插件是background 然后在文件 => 首选项 => 设置搜索bac ...

  5. 图像分割loss集合

    我们只是大佬的搬运工 1.log loss 2.WBE loss 带权重的交叉熵 3.Focal loss 容易过拟合?我在VGG16上做过实验(没有BN层),发现网络在训练集上的性能直线上升,但是验 ...

  6. 基础训练 2n皇后问题

    2n皇后问题 #include<iostream> #include<vector> using namespace std; int cnt = 0, n; vector&l ...

  7. x86保护模式 二 分段管理机制

    分段管理机制 段选择子和偏移地址的二维虚拟地址转换为一维的线性地址 一  段定义和虚拟地址到线性地址的转换 三个参数定义段:段基地址    段界限  和段属性    同时也是段描述符的结构 段基地址为 ...

  8. 【LeetCode】Broken Calculator(坏了的计算器)

    这道题是LeetCode里的第991道题. 题目描述: 在显示着数字的坏计算器上,我们可以执行以下两种操作: 双倍(Double):将显示屏上的数字乘 2: 递减(Decrement):将显示屏上的数 ...

  9. CentOS下SWAP分区建立及释放内存详解

    方法一: 一.查看系统当前的分区情况: >free -m 二.创建用于交换分区的文件: >dd if=/dev/zero of=/whatever/swap bs=block_size ( ...

  10. 【bzoj4197】[Noi2015]寿司晚宴 分解质因数+状态压缩dp

    题目描述 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了 n−1 种不同的寿司,编号 ...