2017.10.6 QBXT 模拟赛
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 模拟赛的更多相关文章
- 2017.10.7 QBXT 模拟赛
题目链接 T1 容斥原理,根据奇偶性进行加减 #include<iostream> #include<cstdio> using namespace std; typedef ...
- 2017.10.3 QBXT 模拟赛
题目链接 T1 模拟 #include <cstring> #include <cstdio> #define N 105000 int L,R; char s[N]; int ...
- 2017.10.5 QBXT 模拟赛
题目链接 T1 从小到大排序,用sum记录前缀和,然后枚举1~n个数 ,如果当前的前缀和 + 1小于a[i]的话 那么 sum + 1永远不可能拼出来 直接输出sum + 1 ,否则统计前缀和.最后如 ...
- 2017.10.4 QBXT 模拟赛
题目链接 T1 维护一个单调栈 #include <iostream> #include <cstdio> #define N 500000 #define rep(a,b,c ...
- 2017.10.2 QBXT 模拟赛
题目链接 T1 我们所要求得是(a*b)|x 也就是 使(a*b)的倍数小于x的个数之和 1<=x<=n 我们可以 找一个c使得 (a*b*c)<=x 由于我们所求的是一个三元有序对 ...
- 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] ...
- 2017 10.25 NOIP模拟赛
期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...
- 2017.10.28 QB模拟赛 —— 下午
题目链接 T1 按x值排序 遇到第二种牌插入 遇到第一种牌 查询<=y 的最小值 删除他 splay multiset cys大佬说 multiset就是不去重的set, #include &l ...
- 2017.10.28 QB模拟赛 —— 上午
题目链接 T1 1e18 内的立方数有 1e6个 直接枚举可过 二分最优 考场用set 死慢.. #include <cstdio> int t; long long p; int ma ...
随机推荐
- MFC编辑框数据实时更新问题
在VC里,很多情况下需要更新控件,也就是调用UpdateData(FALSE);但是如果是在循环中调用该函数,会导致没有时间来刷新界面,消息得不到相应,从外部看来,似乎整个循环只执行了一次Update ...
- Excel添加水印
Excel添加水印[源码下载] 步骤一:根据生成图片的类创建水印图片 步骤二: 代码在Excel中根据第一行获取sheet的列数[sheet.getRow(0).getLastCellNum() ], ...
- Python之文件输入输出,
文件输入与输出 • 打开文件返回文件对象 – file_object=open(file_name,access_mode='r') • 关闭文件对象 – file_object.close() ...
- 我也来Show一下我的VisualStudio2017
1.首先,在微软官方网站下载VS2017的安装程序,后续的安装将通过这个安装程序来引导.这里有三个版本可供选择:社区版.专业版和企业版,社区版免费,专业版和企业版可以免费体验,之后收费,当然,在中国盗 ...
- spring配置与使用
1. 创建基于java的配置. 配置极少量的XML来启用java配置: <?xml version="1.0" encoding="UTF-8"?> ...
- java实现对字符串和数字的冒泡排序
public static void sort(Object[] objects){ if(objects instanceof Number[]){ for (int i = 0; i < o ...
- wampserver2.5局域网公网IP访问配置
wampserver2.5集成环境的安装和使用就不多说了,网上有很多教材.安装好后找到apache的配置文件httpd.conf.默认位置是: swap安装目录\wamp\bin\apache\apa ...
- 第六章 “我要点爆”微信小程序云开发实例之爆文详情页制作
爆文详情页制作 从首页中数据列表打开相应详情页面的方法: 给数据列表中每个数据项加一个点击事件,同时将当前数据项的id暂时记录在本地,然后跳转到详情页面detail goopen: function ...
- JDK12下的ArrayList源码解读 与 Vector的对比
ArrayList源码阅读. //测试代码实现如下 private static void arrayList() { ArrayList<String> list = new Array ...
- Corn Fields(模板)
题目链接 #include <stdio.h> #include <algorithm> #include <string.h> #include <iost ...