题目链接

T1

Sort 一下与原数组比较 ,若有两个数或者没有数发生位置交换 ,则输出YES ,否则输出NO

#include <algorithm>
#include <cctype>
#include <cstdio>
#define N 1005000
int n, cnt1, cnt2, sum;
struct node
{
int num, pos;
bool operator < (node a)const
{
if (num != a.num) return num < a.num;
else return pos < a.pos;
}
}a[N];
int main(int argc, char *argv[])
{
freopen("sort.in", "r", stdin); freopen("sort.out", "w", stdout);
scanf("%d", &n);
for (int i = ; i <= n; ++i) scanf("%d", &a[i].num), a[i].pos=i;
std :: sort(a + , a + n + );
for (int i = ; i <= n; ++i)
{
if (a[i].pos > i) cnt1++;
if (a[i].pos < i) cnt2++;
}
if (cnt1 == || cnt2 == || (!cnt2 && !cnt1)) puts("YES");
else puts("NO");
return ;
fclose(stdin); fclose(stdout);
}

T2

同余方程组

前60%的数据可以用中国剩余定理

后面的数据 用数学构造

X%a1=b1

X%a2=b2

....

X+k1a1=b1

X+k2a2=b2

相减得到 k1a1-k2a2=b1-b2

解这个方程,用exgcd(a1,-a2,k1,k2)

Ax+by=gcd(a,b)

Ax+by=c;

把k1k2回带到原式中,求出x

X0=b1-k1a1

X%a1a2=x0

#include<iostream>
#include<cstdio>
typedef long long LL;
using namespace std; LL n,m[],a[];
LL exgcd(LL a,LL b,LL &x,LL &y)
{
if (b == )
{
x = , y = ;
return a;
}
LL r = exgcd(b, a % b, x, y);
LL tmp = x;
x = y;
y = tmp - a / b * y;
return r;
}
inline LL crt()
{
LL a1 = a[], a2, m2, d, c, m1=m[];
for (LL i = ; i <= ; ++i)
{
a2 = a[i], m2 = m[i];
c = a2 - a1;
LL x, y;
d = exgcd(m1, m2, x, y);
x = x * c / d;
int mod = m2 / d;
x = (mod + x % mod) % mod;
a1 += m1 * x;
m1 *= mod;
}
return a1;
}
int main(int argc, char *argv[])
{
freopen("mod.in", "r", stdin);
freopen("mod.out", "w", stdout);
for(int i = ; i <= ; i++) cin >> m[i] >> a[i];
cout << crt() << endl;
return ;
fclose(stdin); fclose(stdout);
}

T3

可以发现回文串是可以二分的

比如:bbbabcbaabcba 我们以第1个c为中心,发现回文半径是3,大于3一定不是回文串。当回文串长度为偶数的时候,我们需要特殊处理一下。

现在有一个结论:本质不同的回文串个数只有O(N)个

本质不同:字符串本身是不同的。

每一次处理完回文串,我们要把他的hash值记录下来。

#include <algorithm>
#include <cstring>
#include <cstdio>
#include <map> using namespace std;
typedef unsigned long long ULL;
typedef long long LL;
char s[];
ULL h[], rh[], pw[];
int L;
ULL hs(int l, int r)
{
return h[r] - h[l - ] * pw[r - l + ];
}
ULL rhs(int l, int r)
{
return rh[l] - rh[r + ] * pw[r - l + ];
}
struct N
{
int a[];
bool ok()
{
int b[];
for (int i = ; i < ; i++) b[i] = a[i];
sort(b,b + );
for (int i = ; i < ; i++)
{
if (b[i] > && b[i] == b[i + ]) return true;
}
return false;
}
void clear()
{
memset(a, , sizeof(a));
}
};
LL ans = ;
map<ULL, LL> num;
map<ULL, N> A;
void solve_odd()
{
for (int i = ; i <= L; i++)
{
int l = ,r = min(i,L - i + ) + ;
while (r - l > )
{
int mid = (l + r) >> ;
if (hs(i - mid + , i + mid - ) == rhs(i - mid + , i + mid - )) l = mid;
else r = mid;
}
int p = l;
int tmp = p;
while (tmp >= && num.find(hs(i - tmp + , i + tmp - )) == num.end()) tmp--;
LL sum = ;
N st;
st.clear();
if (tmp >= )
{
sum = num[hs(i - tmp + , i + tmp - )];
st = A[hs(i - tmp + ,i + tmp - )];
}
while (tmp < p)
{
st.a[s[i + tmp]-'a'] += (tmp == ? : );
if (st.ok()) sum++;
num[hs(i - tmp, i + tmp)] = sum;
A[hs(i - tmp, i + tmp)] = st;
tmp++;
}
ans += sum;
}
}
void solve_even()
{
A.clear();
num.clear();
for(int i = ; i < L; i++)
{
int l = ,r = min(i,L - i) + ;
while (r - l > )
{
int mid = (l + r) >> ;
if (hs(i - mid + , i + mid) == rhs(i - mid + , i + mid)) l = mid;
else r = mid;
}
int p = l,tmp = p;
while (tmp >= && num.find(hs(i - tmp + , i + tmp)) == num.end()) tmp--;
LL sum = ;
N st;
st.clear();
if (tmp >= )
{
sum = num[hs(i - tmp + , i + tmp)];
st = A[hs(i - tmp + , i + tmp)];
}
while (tmp < p)
{
st.a[s[i + tmp + ] - 'a'] += ;
if (st.ok()) sum++;
num[hs(i - tmp, i + tmp + )] = sum;
A[hs(i - tmp, i + tmp + )] = st;
tmp++;
}
ans += sum;
}
}
int main()
{
freopen("str.in", "r", stdin);
freopen("str.out", "w", stdout);
scanf("%s", s + );
L = strlen(s + );
s[] = '#';
pw[] = ;
for(int i = ; i <= L; i++) pw[i] = pw[i - ] * ;
for(int i = ; i <= L; i++) h[i] = h[i - ] * + s[i];
for (int i = L; i >= ; i--) rh[i] = rh[i + ] * + s[i];
solve_odd();
solve_even();
printf("%lld\n", ans);
fclose(stdout);
return ;
}

2017.10.6 QBXT 模拟赛的更多相关文章

  1. 2017.10.7 QBXT 模拟赛

    题目链接 T1 容斥原理,根据奇偶性进行加减 #include<iostream> #include<cstdio> using namespace std; typedef ...

  2. 2017.10.3 QBXT 模拟赛

    题目链接 T1 模拟 #include <cstring> #include <cstdio> #define N 105000 int L,R; char s[N]; int ...

  3. 2017.10.5 QBXT 模拟赛

    题目链接 T1 从小到大排序,用sum记录前缀和,然后枚举1~n个数 ,如果当前的前缀和 + 1小于a[i]的话 那么 sum + 1永远不可能拼出来 直接输出sum + 1 ,否则统计前缀和.最后如 ...

  4. 2017.10.4 QBXT 模拟赛

    题目链接 T1 维护一个单调栈 #include <iostream> #include <cstdio> #define N 500000 #define rep(a,b,c ...

  5. 2017.10.2 QBXT 模拟赛

    题目链接 T1 我们所要求得是(a*b)|x 也就是 使(a*b)的倍数小于x的个数之和 1<=x<=n 我们可以 找一个c使得 (a*b*c)<=x 由于我们所求的是一个三元有序对 ...

  6. 2017.10.1 QBXT 模拟赛

    题目链接 T1 枚举右端点,前缀和优化.对于当前点x,答案为 sum[x][r]-sum[x][l-1]-(sum[z][r]-sum[z][l-1]) 整理为 sum[x][r]-sum[z][r] ...

  7. 2017 10.25 NOIP模拟赛

    期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w    O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...

  8. 2017.10.28 QB模拟赛 —— 下午

    题目链接 T1 按x值排序 遇到第二种牌插入 遇到第一种牌 查询<=y 的最小值 删除他 splay multiset cys大佬说 multiset就是不去重的set, #include &l ...

  9. 2017.10.28 QB模拟赛 —— 上午

    题目链接 T1 1e18 内的立方数有 1e6个 直接枚举可过 二分最优 考场用set  死慢.. #include <cstdio> int t; long long p; int ma ...

随机推荐

  1. ACM-ICPC2018南京网络赛 AC Challenge(一维状压dp)

    AC Challenge 30.04% 1000ms 128536K   Dlsj is competing in a contest with n (0 < n \le 20)n(0<n ...

  2. Kth Largest Element in a Stream

    Design a class to find the kth largest element in a stream. Note that it is the kth largest element ...

  3. 《深度学习-改善深层神经网络》-第二周-优化算法-Andrew Ng

    目录 1. Mini-batch gradient descent 1.1 算法原理 1.2 进一步理解Mini-batch gradient descent 1.3 TensorFlow中的梯度下降 ...

  4. js混杂笔记

    1.判断对象为空的方法 1)Object.keys({}).length === 0 // true 2)Object.getOwnPropertyNames({}).length === 0 // ...

  5. 以太坊开发教程(一) truffle框架简介/安装/使用

    通常一个DAPP的开发包括两部分:智能合约的开发和提供合约进行调用的前端页面. truffle提供了对这两部分内容比较简单的开发方式,特别是在开发/测试阶段.给开发人员提供快捷的打包/部署,已经本地服 ...

  6. IT兄弟连 Java语法教程 Java开发环境 配置Java环境变量

    在安装完JDK后,我们需要配置系统的环境变量,否则在控制台中使用JDK为我们提供的工具时将出现如图12所示的错误信息. 图12  未配置环境变量时执行java命令提示的错误信息 当出现这样的提示信息时 ...

  7. 剑指Offer的学习笔记(C#篇)-- 合并两个排序的链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 一 . 题目分析 根据题意,可得出,该题目要求两个单增的链表合成一条单增的链表. 链表一:1→5 ...

  8. Spring包的依赖关系以及提供下载

    https://www.jianshu.com/p/5b0c96975164 这篇简书叙述的很完整 一下是个人整和的炸包,里面有很全面的Spring包, 还有一些其他包,都是官网下载 emmmm... ...

  9. 使用JS判断客户端、浏览器、操作系统类型

    一.JS判断客户端类型 JS判断客户端是否是iOS或者Android手机移动端 通过判断浏览器的userAgent,用正则来判断手机是否是ios和Android客户端. 核心代码如下: 方法一: &l ...

  10. Python-10-条件和条件语句

    num = int(input('Enter a number: ')) if num > 0:     print('The number is positive') elif num < ...