博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
17.10.24 数据最水的一次考试
阅读量:4356 次
发布时间:2019-06-07

本文共 4915 字,大约阅读时间需要 16 分钟。

A + 35 + 0

 

总结:

总的来说这次考试的测试数据有点垃lj,

T1 n <= 1e5, 然而n ^ 2都是可以过的

T2 感觉 k 就是个lj,没有啥用,首先对于k=1的情况,可以枚举每条q边

即使直接跑最短路也可以过 60%,对于最后30%,实际数据k >= n,然而没仔细看(理解)数据范围。

数组开小了,丢了40‘;

T3 难。

1.每道题都要看数据范围,看看有没有好骗分的lj数据

2.不要开不够数组!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

题目描述

现在有一个字符串,每个字母出现的次数均为偶数。接下来我们把第一次出现的字母a和第二次出现的a连一条线,第三次出现的和四次出现的字母a连一条线,第五次出现的和六次出现的字母a连一条线...对其他25个字母也做同样的操作。

现在我们想知道有多少对连线交叉。交叉的定义为一个连线的端点在另外一个连线的内部,另外一个端点在外部。

下图是一个例子,共有三对连线交叉(我们连线的时候,只能从字符串上方经过)。

 

 

输入格式

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

输出格式

一个整数,表示答案。

样例输入

abaazooabz

样例输出

3

数据范围

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

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

#include 
#include
#include
#include
#include
#include
using namespace std;const int N = 1e5 + 10;string s;int a[N], l[N], r[N], bel[N], last[N];int len; long long answer;int main(){ freopen("cross.in","r",stdin); freopen("cross.out","w",stdout); cin >> s; int len = s.length(); for(int i = 0; i < len; i ++) a[i + 1] = s[i] - 'a' + 1; for(int i = 1; i <= len; i ++)//yi i wei duan dian// 0 -> zuo, 1 -> you if(last[a[i]]) l[i] = last[a[i]], r[last[a[i]]] = i, last[a[i]] = 0, bel[i] = 1; else last[a[i]] = i, bel[i] = 0; for(int i = 1; i <= 26; i ++) for(int j = 1; j <= len; j ++) if(a[j] == i && bel[j] == 0){ int k = j + 1; while(a[k] != a[j]){ if(bel[k] == 1 && l[k] < j) answer ++; k ++; } j = k; } printf("%lld", answer); return 0;} /*abaazooabz3*/

 

跳跳虎回家

 

 

#include 
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int N = 5010;const int oo = 99999999;const int la = 2005;int n, m, q, k, now = 1;int u2[la], v2[la], w2[la];int head[N], dis[N], dis_2[N], pre[N], is_q[N][N], cha[N];bool vis[N];struct Node{ int u, v, w, nxt;};Node E[N << 2];queue
Q;struct T2{ inline int read(){ int x = 0; char c = getchar(); while(c < '0' || c > '9') c = getchar(); while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar(); return x; } inline void add(int u, int v, int w){ E[now].v = v; E[now].w = w; E[now].nxt = head[u]; head[u] = now ++; return ; } inline int spfa_1(int start, int endd){ for(int i = 1; i <= n; i ++) dis[i] = oo, vis[i] = 0; dis[start] = 0; vis[start] = 1; Q.push(start); while(!Q.empty()){ int topp = Q.front(); Q.pop(); vis[topp] = 0; for(int i = head[topp]; ~ i; i = E[i].nxt){ if(dis[E[i].v] > dis[topp] + E[i].w){ dis[E[i].v] = dis[topp] + E[i].w; if(!vis[E[i].v]){ Q.push(E[i].v); vis[E[i].v] = 1; } } } } return dis[endd]; } inline int spfa_2(int start, int endd){ for(int i = 1; i <= n; i ++) dis[i] = oo, vis[i] = 0; dis[start] = 0; vis[start] = 1; Q.push(start); while(!Q.empty()){ int topp = Q.front(); Q.pop(); vis[topp] = 0; for(int i = head[topp]; ~ i; i = E[i].nxt){ if(dis[E[i].v] > dis[topp] + E[i].w && !is_q[topp][E[i].v]){ dis[E[i].v] = dis[topp] + E[i].w; if(!vis[E[i].v]){ Q.push(E[i].v); vis[E[i].v] = 1; } } } } return dis[endd]; }} t2;int main(int argc, char *argv[]){ //freopen("move.in","r",stdin); //freopen("move.out","w",stdout); n = t2.read(); m = t2.read(); q = t2.read(); k = t2.read(); for(int i = 1; i <= n; i ++) head[i] = -1; for(int i = 1; i <= m; i ++){ int u = t2.read(); int v = t2.read(); int w = t2.read(); t2.add(u, v, w); } if(k == 0){ int ans_1 = t2.spfa_1(1, n); printf("%d", ans_1 == oo ? -1 : ans_1); return 0; } for(int i = 1; i <= q; i ++){ u2[i] = t2.read(); v2[i] = t2.read(); w2[i] = t2.read(); is_q[u2[i]][v2[i]] = 1; t2.add(u2[i], v2[i], w2[i]); } if(k == 1){ int answer = oo; for(int i = 1; i <= q; i ++){ is_q[u2[i - 1]][v2[i - 1]] = 1; is_q[u2[i]][v2[i]] = 0; int now_ans = t2.spfa_2(1, n); answer = min(answer, now_ans); } printf("%d", answer); } else{ int ans_1 = t2.spfa_1(1, n); printf("%d", ans_1 == oo ? -1 : ans_1); } return 0;}/*5 5 2 11 2 11 3 22 4 23 4 34 5 41 4 12 5 1*/

 

秀秀 和哺 噜国 ( cut )

 

#include
#include
#define N 5555#define M 786433using namespace std;typedef long long LL;struct edge { int t,n;} e[N*2];LL h[N],size[N],f[N][N],g[N],cnt[N];int n,K,tote;void add(int u,int v) { e[++tote].t=v; e[tote].n=h[u]; h[u]=tote; return ;}void dfs(int u,int fa) { size[u]++; f[u][1]=1; for (int i=h[u]; i; i=e[i].n) { int v=e[i].t; if (v==fa) continue; dfs(v,u); for (int j=1; j<=size[u]+size[v]; j++) g[j]=0; for (int j=1; j<=size[u]; j++) g[j]=cnt[v]*f[u][j]%M; for (int j=1; j<=size[u]; j++) for (int k=1; k<=size[v]; k++) g[j+k]=(g[j+k]+f[u][j]*f[v][k]%M)%M; for (int j=1; j<=size[u]+size[v]; j++) f[u][j]=g[j]; size[u]+=size[v]; } for (int i=K; i<=size[u]; i++) cnt[u]=(cnt[u]+f[u][i])%M; return ;}int main() {
scanf("%d %d",&n,&K); for (int i=1; i

 

转载于:https://www.cnblogs.com/lyqlyq/p/7719202.html

你可能感兴趣的文章
SAP(最短增广路算法) 最大流模板
查看>>
用极大化思想解决矩形问题学习笔记
查看>>
Django REST Framework 简单入门
查看>>
Hibernate中fetch和lazy介绍
查看>>
修改ip脚本
查看>>
解析xlsx与xls--使用2012poi.jar
查看>>
SSL-ZYC 活动安排
查看>>
c# 动态绘制直线和曲线
查看>>
Spring理解?
查看>>
[poj3261]Milk Patterns(后缀数组)
查看>>
[luogu3369]普通平衡树(fhq-treap模板)
查看>>
题解 P2799 【国王的魔镜】
查看>>
写写代码,注意注意细节
查看>>
css Backgroud-clip (文字颜色渐变)
查看>>
安装 OpenSSL 工具
查看>>
用长微博工具发布长微博
查看>>
大庆金桥帆软报表案例
查看>>
JavaScript BOM加载事件
查看>>
Java复习总结——详细理解Java反射机制
查看>>
Navicat for MySQL10.1.7注册码
查看>>