Codeforces Round #226 (Div. 2 )
这次精神状态不怎么好,第一题的描述看得我就蛋疼。。。看完就速度写了~~~最终fst了%>_<%,第二题写复杂了,一直WA pretest 3,然后就紧张,导致精神更不好了,一直纠结在第二题,时间就这样过了,再一次拿了0蛋,妈蛋,真是蒟蒻啊%>_<%
A.看懂题之后就是A+B problem
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <string>
#include <map>
using namespace std;
int main()
{
int n,c;
cin>>n>>c;
int a,ans=0;
cin>>a;
for(int i=2;i<=n;i++)
{
int b;
cin>>b;
ans=max(ans,a-b-c);
a=b;
}
cout<<ans<<endl;
return 0;
}
B.给定字符串s = s1s2... s|s| ,问包含单词"bear"的子串有多少个?
假设当前字符串的长度为n,找到第一个"bear"所在的开始位置pos,那么符合要求的子串就有pos*(n-pos-2)个,之后把子串s1~spos删除
重复以上步骤,直至没有单词"bear"
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <string>
#include <map>
using namespace std;
#define MAXN 5555
string s;
int main()
{
cin>>s;
int ans=0,pos;
while((pos=s.find("bear"))!=-1)
{
ans+=(pos+1)*(s.size()-pos-3);
s.erase(s.begin(),s.begin()+pos+1);
}
cout<<ans<<endl;
return 0;
}
C.给定一个序列x[1],x[2],x[3],……x[n],然后接下来有m个查询,对于每个查询给出两个数l和r,要求你返回区间[l,r]内的每一个质数能够整除的序列元素个数的累加和
没有修改,只有查询,果断的离线~~~先用素数的线性筛法求出每个x[i]的最小质数因子,接下来对每个x[i]进行质因数分解,并对相应的因子进行统计,搞完之后再计算出前缀和出来(用sum数组表示)
,那么对于查询[l,r],结果就是sum[r]-sum[l-1]
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <string>
#include <map>
using namespace std;
#define MAXN 10000005
typedef long long LL;
int a[MAXN];
LL sum[MAXN];
int prime[MAXN],cnt=0;
int check[MAXN];
void get_prime()
{
memset(check,0,sizeof(check));
for(int i=2; i<MAXN; i++)
{
if(!check[i])
{
prime[cnt++]=i;
check[i]=i;
}
for(int j=0; j<cnt&&i*prime[j]<MAXN; j++)
{
check[i*prime[j]]=prime[j];
if(i%prime[j]==0) break;
}
}
}
void fac(int n)
{
for(int i=0; i<n; i++)
{
int d=a[i];
int pre=-1;
while(d!=1)
{
if(pre!=check[d])
sum[check[d]]++;
pre=check[d];
d/=check[d];
}
}
}
int main()
{
int n,m;
get_prime();
scanf("%d",&n);
for(int i=0; i<n; i++) scanf("%d",&a[i]);
fac(n);
for(int i=1; i<MAXN; i++) sum[i]+=sum[i-1];
scanf("%d",&m);
while(m--)
{
int l,r;
scanf("%d%d",&l,&r);
r=min(r,10000000);
if(l>r) printf("0\n");
else
printf("%I64d\n",sum[r]-sum[l-1]);
}
return 0;
}
D.略 计算几何全还给高中数学老师了。。。有时间得在好好学学
E.题目描述就不说了,就是给定几个变量的变化关系,问你在t次变化之后的值
根据题目意思可以求出各个变量的递推式来,由于t很大(t<1018),所以线性模拟肯定超时,于是就要用到矩阵快速幂来加速递推(这学期刚好学了线代~~~),构造出矩阵之后进行快速幂运算就OK
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
const int maxn=6;
typedef long long LL;
typedef long long Matrix[maxn][maxn];
LL M[maxn][maxn]=
{
{2,1,1,0,1,0},
{1,2,0,1,1,0},
{1,1,1,0,1,0},
{1,1,0,1,1,0},
{0,0,0,0,1,1},
{0,0,0,0,0,1},
};
LL n;
void matrix_mul(Matrix A, Matrix B, Matrix res)
{
Matrix C;
memset(C, 0, sizeof(C));
for(int i = 0; i < 6; i++)
for(int j = 0; j < 6; j++)
for(int k = 0; k < 6; k++) C[i][j] = (C[i][j] + A[i][k] * B[k][j])%n;
memcpy(res, C, sizeof(C));
}
void matrix_pow(Matrix A,Matrix res,LL n)
{
Matrix a, r;
memcpy(a, A, sizeof(a));
memset(r, 0, sizeof(r));
for(int i = 0; i < 6; i++) r[i][i] = 1;
while(n)
{
if(n&1) matrix_mul(r, a, r);
n >>= 1;
matrix_mul(a, a, a);
}
memcpy(res, r, sizeof(r));
}
int main()
{
LL sx,sy,dx,dy,t;
Matrix A,B;
cin>>n>>sx>>sy>>dx>>dy>>t;
matrix_pow(M,A,t);
memset(B,0,sizeof(B));
B[0][0]=sx,B[1][0]=sy,B[2][0]=dx;
B[3][0]=dy,B[4][0]=0,B[5][0]=1;
matrix_mul(A,B,B);
LL x,y;
x=B[0][0],y=B[1][0];
if(x<=0) x+=n;
if(y<=0) y+=n;
cout<<x<<" "<<y<<endl;
return 0;
}
Codeforces Round #226 (Div. 2 )的更多相关文章
- Codeforces Round #226 (Div. 2) B
B. Bear and Strings time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #226 (Div. 2)C. Bear and Prime Numbers
/* 可以在筛选质数的同时,算出每组数据中能被各个质数整除的个数, 然后算出[0,s]的个数 [l,r] 的个数即为[0,r]的个数减去[0,l]个数. */ #include <stdio.h ...
- Codeforces Round #226 (Div. 2)A. Bear and Raspberry
/* 贪心的找到相邻两项差的最大值,再减去c,结果若是负数答案为0. */ 1 #include <stdio.h> #define maxn 105 int num[maxn]; int ...
- Codeforces Round #226 (Div. 2)B. Bear and Strings
/* 题意就是要找到包含“bear”的子串,计算出个数,需要注意的地方就是不要计算重复. */ 1 #include <stdio.h> #include <string.h> ...
- 【计算几何】【状压dp】Codeforces Round #226 (Div. 2) D. Bear and Floodlight
读懂题意发现是傻逼状压. 只要会向量旋转,以及直线求交点坐标就行了.(验证了我这俩板子都没毛病) 细节蛮多. #include<cstdio> #include<algorithm& ...
- Codeforces Round #226 (Div. 2) C题
数论好题 题目要求:求给定序列的素因子如果在给定区间内该数字个数加1; 思路:打表时求出包含给素数因子的数的个数,详见代码 1 #include<cstring> +; scan ...
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
随机推荐
- jmeter 响应结果分析一
转自:http://www.cnblogs.com/Carrie_Liang/archive/2008/11/05/1327604.html Jmeter测试结果分析这一篇,我打算分成上下两部分.上篇 ...
- java版AC自动机
class Trie { int [][]Next=new int[500005][128]; int []fail=new int[500005]; int []end=new int[500005 ...
- iOS如何把导航默认的返回按钮设置成“返回”
版权声明:本CSDN博客所有文章不更新,请关注标哥博客:http://www.henishuo.com/ - (void)addBackItemWithAction:(SEL)action { if ...
- P59、面试题7:用两个栈实现队列
题目:用两个栈实现一个队列.队列声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列为插入结点和在队列头部删除结点的功能. stack1专门用于插入数据,stack2 ...
- Hibernate征途(五)之继承映射和组件映射
之所以把这两种映射放到一起说,是因为二者都是以复用为目的,减少了代码和配置量,这是相同点:二者之间的不同点类似继承和实现的区别:继承的类是一个事物的抽象,而实现的接口仅仅是功能的抽象. 继承映射 如上 ...
- Linux下实现C++类的动态链接
1. 背景 在java中,jvm支持类的动态链接(Class.forName(String className)),用起来也很方便.动态链接是实现IOC(Inversion of Control,控制 ...
- 安装universal-ctags
universal-ctags是exuberant-ctags的替代者,相比gtags可以解析更多的语言,但是其他方面比如操作,数据库的组织方式等就不够好.需要自己编译安装 先用 git clone ...
- JavaScript DOM高级程序设计1.2-循序最佳实践--我要坚持到底!
我这人,最大的毛病就是浮躁. 下面开始我再一次的学习之旅,希望我能坚持到最后.记笔记除了分享以外,更重要的是让自己看见自己学习之路. 先把ADS库贴出来http://vdisk.weibo.com/s ...
- Android 签名(4)验证是否签名
判断Apk是否签名 用命令:jarsigner -verify XXX.apk 增加 -verbose -certs 两个选项可显示更多信息. 如果有Android Debug字樣就是debug 如 ...
- 【HDOJ】4579 Random Walk
1. 题目描述一个人沿着一条长度为n个链行走,给出了每秒钟由i到j的概率($i,j \in [1,n]$).求从1开始走到n个时间的期望. 2. 基本思路显然是个DP.公式推导也相当容易.不妨设$dp ...