Codeforces Round #215 (Div. 1) <A-B>
来源:互联网 发布:淘宝店信用怎么提高 编辑:程序博客网 时间:2024/04/29 18:19
367A. Sereja and Algorithm
题目链接:
http://codeforces.com/problemset/problem/367/A
题目意思:
判断一个串,有没有几率跳出以下算法循环。
1、在该串中找不包含"zyx”,"xzy","yxz"的任意一个包含三个字符的字符串,如果找不到则跳出去,否则跳到第二步执行。
2、将这三个字符串随机的重新排序,然后跳到1.
解题思路:
分析知,如果x,y,z不全包含,肯定能找到,也就跳不出去。否则分析之zyxzyyxz 形成一条链。只要任意两个字符的个数差小于2就可以凑成。
代码:
#include<iostream>#include<cmath>#include<cstdio>#include<sstream>#include<cstdlib>#include<string>#include<string.h>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<set>#include<stack>#include<list>#include<queue>#include<ctime>#include<bitset>#define eps 1e-6#define INF 0x3f3f3f3f#define PI acos(-1.0)#define ll __int64#define LL long long#define lson l,m,(rt<<1)#define rson m+1,r,(rt<<1)|1#define M 1000000007#pragma comment(linker, "/STACK:1024000000,1024000000")using namespace std;#define Maxn 110000struct Inf{ int a,b,c;}inf[Maxn];char save[Maxn];int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); while(~scanf("%s",save+1)) { int n=strlen(save+1),m; inf[0].a=inf[0].b=inf[0].c=0; for(int i=1;i<=n;i++) { inf[i]=inf[i-1]; if(save[i]=='x') inf[i].a++; else if(save[i]=='y') inf[i].b++; else inf[i].c++; } scanf("%d",&m); for(int i=1;i<=m;i++) { int li,ri; scanf("%d%d",&li,&ri); int a,b,c; a=inf[ri].a-inf[li-1].a; b=inf[ri].b-inf[li-1].b; c=inf[ri].c-inf[li-1].c; if(a+b+c<3) { printf("YES\n"); continue; } if(!a||!b||!c) { printf("NO\n"); continue; } if(abs(a-b)>=2||abs(a-c)>=2||abs(b-c)>=2) printf("NO\n"); else printf("YES\n"); } } return 0;}
367B. Sereja ans Anagrams
题目链接:
http://codeforces.com/problemset/problem/367/B
题目意思:
给两个数组a,b。大小分别为n,m.给一个p.
在数组a中每隔p个得到一个序列,求该序列中有多少个与b数组元素一模一样,不考虑元素顺序。
解题思路:
先按%p分组,放到vector里面。
m>ceil(n/p) (最大队列的长度)剪枝。
用map判断两个数组元素是否一样。
代码:
#include<iostream>#include<cmath>#include<cstdio>#include<sstream>#include<cstdlib>#include<string>#include<string.h>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<set>#include<stack>#include<list>#include<queue>#include<ctime>#include<bitset>#define eps 1e-6#define INF 0x3f3f3f3f#define PI acos(-1.0)#define ll __int64#define LL long long#define lson l,m,(rt<<1)#define rson m+1,r,(rt<<1)|1#define M 1000000007#pragma comment(linker, "/STACK:1024000000,1024000000")using namespace std;#define Maxn 210000int a[Maxn],b[Maxn];int n,m,p,num,num1;vector<int>myv[Maxn];vector<int>ans;map<int,int>myp1,myp2;int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); while(~scanf("%d%d%d",&n,&m,&p)) { for(int i=0;i<n;i++) myv[i].clear(); myp1.clear(); myp2.clear(); ans.clear(); num1=0; for(int i=0;i<n;i++) { scanf("%d",&a[i]); myv[i%p].push_back(i); } if(m>ceil(n*1.0/p)) //可行性剪枝 { for(int i=0;i<m;i++) { int temp; scanf("%d",&temp); } printf("0\n"); continue; } for(int i=0;i<m;i++) { scanf("%d",&b[i]); myp1[b[i]]--; //b中元素 if(myp1[b[i]]==-1) //多少个不为0的 num1++; } for(int i=0;i<p;i++) { myp2=myp1; //赋值给myp2 num=num1; if(myv[i].size()<m) continue; for(int j=0;j<m;j++) //先把前m个加进来 { int ff=myv[i][j]; myp2[a[ff]]++; if(!myp2[a[ff]]) //填充好的的个数 num--; else if(myp2[a[ff]]==1) num++; } int fi=0; if(!num) ans.push_back(fi*p+i+1); //注意下标位置 for(int j=m;j<myv[i].size();j++) //后面的元素 加一个减一个 { int ff=myv[i][j]; myp2[a[ff]]++; //加 if(myp2[a[ff]]==1) num++; else if(!myp2[a[ff]]) num--; ff=myv[i][fi]; myp2[a[ff]]--; //减 if(!myp2[a[ff]]) num--; else if(myp2[a[ff]]==-1) num++; fi++; if(!num) ans.push_back(fi*p+i+1); } } sort(ans.begin(),ans.end()); //排序输出 printf("%d\n",ans.size()); for(int i=0;i<ans.size();i++) printf("%d ",ans[i]); putchar('\n'); } return 0;}/*68 16 35 3 4 3 3 3 2 2 2 3 2 4 2 2 2 2 4 3 5 1 1 2 2 2 3 1 5 1 2 2 1 5 1 5 3 2 3 5 2 1 1 4 2 3 4 3 4 3 3 1 3 4 1 5 2 5 3 4 4 1 4 5 5 1 1 2 2 25 4 4 3 5 1 1 2 3 2 2 1 3 3 2 232 13 15*/
- Codeforces Round #215 (Div. 1) <A-B>
- Codeforces Round #239 (Div. 1)(A,B)
- Codeforces Round #253 (Div. 1)-A,B
- Codeforces Round #254 (Div. 1)-A,B
- Codeforces Round #292 (Div. 1) (A B)
- Codeforces Round #295 (Div. 1) (A B)
- Codeforces Round #296 (Div. 1) (A B)
- Codeforces Round #305 (Div. 1) A && B
- Codeforces Round #310 (Div. 1)A B
- Codeforces Round #215 (Div. 1)(A,B,C)
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1)A,B
- (Codeforces Round #413, rated, Div. 1 + Div. 2)(A+B)
- Codeforces Round #174 (Div. 1) (A, B, C)
- Codeforces Round #198 (Div. 1)(A,B,C,D)
- Codeforces Round #207 (Div. 1)(A,B,C)
- Codeforces Round #210 (Div. 1) (A, B, C)
- Codeforces Round #148 (Div. 1)(A,B,C)
- Codeforces Round #219 (Div. 1)(A,B,C)
- 20131128
- 急急急急 _bstr_t与CString相互转换
- 解构微信(一):邮件中诞生与开发的逆境
- hdu 1720 A+B Coming
- 文件读写操作
- Codeforces Round #215 (Div. 1) <A-B>
- 责任链或过滤器模式2-使用过滤链
- 关于Ph.D的那些事
- android 主题样式theme style区别
- HDU 2680 Choose the best route 变形最短路 DIJKSTRA
- 静态数据成员和静态成员函数
- PHP+FPM导致内存耗光的问题
- 数组编译时出错error C2057: expected constant expression,以及解决办法
- TCP/IP