Codeforces#373 Div2
Ranting重新回到蓝的一场比赛
Problem A
题意:月亮的大小是按照这样的顺序排列的0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
然后给定一串数,试判断最后一个是增加还是减少
分析:这题还被hack了,对于最后一个不是0,15,且是一个数的情况,直接输出-1,然后只有一个数是0或15,分别对应增加或减少,然后其他的
情况就分别讨论与前一个数的关系就行
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=;
int a[maxn];
int n;
int main()
{
while(cin>>n)
{
for(int i=;i<=n;i++)
cin>>a[i];
if(a[n]==){
cout<<"UP"<<endl;
continue;
}
if(a[n]==){
cout<<"DOWN"<<endl;
continue;
}
if(n==){
cout<<"-1"<<endl;
continue;
}
if(a[n-]<a[n]){
cout<<"UP"<<endl;
}else{
cout<<"DOWN"<<endl;
}
}
return ;
}
Problem B
题意:全是由r和b组成的字符串,要改成交错的,问至少要操作多少次
分析:这题可以(1)分别统计如果奇数位全为r,偶数位全为b要修改的次数,取二者当中的最大;(2)统计如果奇数位全为b,偶数位全为r要修改的次数,取二者当中的最大;最后再来求(1)和(2)的最小
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=;
int a[maxn];
int n;
int main()
{
while(cin>>n)
{
for(int i=;i<=n;i++){
char ch;
cin>>ch;
if(ch=='b'){
a[i]=;
}else{
a[i]=;
}
} int cntb=,cntr=;
int ans=<<;
int tot=;
for(int i=;i<=n;i++){
if(i%==){
if(!a[i]){
cntb++;
}
}
}
for(int i=;i<=n;i++){
if(i%==){
if(a[i]){
cntr++;
}
}
}
while(cntr&&cntb) tot++,cntr--,cntb--;
tot+=cntr+cntb;
ans=min(ans,tot); int cntr1=,cntb1=;
int tot1=;
for(int i=;i<=n;i++){
if(i%==){
if(a[i])
cntb1++;
}
}
for(int i=;i<=n;i++){
if(i%==){
if(!a[i])
cntr1++;
}
}
while(cntb1&&cntr1) tot1++,cntr1--,cntb1--;
tot1+=cntr1+cntb1;
ans=min(ans,tot1);
cout<<ans<<endl;
}
return ;
}
Problem C
暂时没做
Problem E
题意:给定一个数组,1表示对区间[l,r]每个数加上x,2表示统计[l,r]中已元素为下标的斐波拉契的和
分析:矩阵快速幂+线段树 ,这题是很好的模板题,get一份很好的模板
//
// main.cpp
// E
//
// Created by wanghan on 16/9/26.
// Copyright © 2016年 wanghan. All rights reserved.
// #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#include<cctype>
#include<map>
#include<set>
#include<deque>
using namespace std;
const int N=;
const long long MOD=1e9+;
const int maxn=1e5+;
int n,m; //矩阵快速幂
struct Matrix{
int a[][];
Matrix(){
memset(a,,sizeof(a));
}
void init(){
for(int i=;i<N;i++)
for(int j=;j<N;j++)
a[i][j]=(i==j);
}
Matrix operator + (const Matrix &B)const{
Matrix C;
for(int i=;i<N;i++)
for(int j=;j<N;j++)
C.a[i][j]=(a[i][j]+B.a[i][j])%MOD;
return C;
}
Matrix operator * (const Matrix &B)const{
Matrix C;
for(int i=;i<N;i++)
for(int k=;k<N;k++)
for(int j=;j<N;j++)
C.a[i][j]=(C.a[i][j]+1LL*a[i][k]*B.a[k][j])%MOD;
return C;
}
Matrix operator ^ (const int &t)const{
Matrix A=(*this),res;
res.init();
int p=t;
while(p){
if(p&) res=res*A;
A=A*A;
p>>=;
}
return res;
}
}One,Two; //线段树部分
Matrix sum[maxn<<],add[maxn<<];
void PushUp(int rt){
sum[rt]=sum[rt<<]+sum[rt<<|];
}
void Build(int l,int r,int rt){
add[rt].init();
if(l==r){
sum[rt]=One;
return;
}
int mid=(l+r)/;
Build(l,mid,rt<<);
Build(mid+,r,rt<<|);
PushUp(rt);
} void PushDown(int rt,int l,int r)
{
if(add[rt].a[][]!=){
int mid=(l+r)/;
add[rt<<]=add[rt<<]*add[rt];
sum[rt<<]=(sum[rt<<]*add[rt]);
add[rt<<|]=(add[rt<<|]*add[rt]);
sum[rt<<|]=(sum[rt<<|]*add[rt]);
add[rt].init();
}
}
void Update(int L,int R,Matrix& v, int l,int r,int rt){
if(l>R||r<L)
return;
if(L<=l&&r<=R){
add[rt]=add[rt]*v;
sum[rt]=sum[rt]*v;
return;
}
PushDown(rt, l, r);
int mid=(l+r)/;
Update(L, R, v, l, mid, rt<<);
Update(L, R, v, mid+, r, rt<<|);
PushUp(rt);
}
int Query(int L,int R,int l,int r,int rt){
if(l>R||r<L)
return ;
if(L<=l&&r<=R)
return sum[rt].a[][];
PushDown(rt, l, r);
int mid=(l+r)/;
return (Query(L, R, l, mid, rt<<)
+Query(L, R, mid+, r, rt<<|))%MOD;
} //初始化斐波拉契数列
void Init(){
One.a[][]=,One.a[][]=;
One.a[][]=,One.a[][]=;
Two.a[][]=,Two.a[][]=;
Two.a[][]=,Two.a[][]=;
} int tt[maxn];
int main()
{
Init();
while(scanf("%d%d",&n,&m)!=EOF)
{
Build(, n, );
for(int i=;i<=n;i++)
scanf("%d",&tt[i]);
Matrix tmp;
for(int i=;i<=n;i++){
tmp=Two^(tt[i]-);
Update(i, i, tmp, , n, );
}
for(int i=;i<=m;i++){
int num,x,y,w;
scanf("%d",&num);
if(num==){
scanf("%d%d%d",&x,&y,&w);
tmp=Two^(w);
Update(x, y, tmp, , n, );
}else{
scanf("%d%d",&x,&y);
cout<<Query(x, y, , n, )<<endl;
}
}
}
return ;
}
Codeforces#373 Div2的更多相关文章
- Codeforces #180 div2 C Parity Game
// Codeforces #180 div2 C Parity Game // // 这个问题的意思被摄物体没有解释 // // 这个主题是如此的狠一点(对我来说,),不多说了这 // // 解决问 ...
- Codeforces #541 (Div2) - E. String Multiplication(动态规划)
Problem Codeforces #541 (Div2) - E. String Multiplication Time Limit: 2000 mSec Problem Descriptio ...
- Codeforces #541 (Div2) - F. Asya And Kittens(并查集+链表)
Problem Codeforces #541 (Div2) - F. Asya And Kittens Time Limit: 2000 mSec Problem Description Inp ...
- Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)
Problem Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...
- Codeforces #548 (Div2) - D.Steps to One(概率dp+数论)
Problem Codeforces #548 (Div2) - D.Steps to One Time Limit: 2000 mSec Problem Description Input Th ...
- codeforces 373 A - Efim and Strange Grade(算数模拟)
codeforces 373 A - Efim and Strange Grade(算数模拟) 原题:Efim and Strange Grade 题意:给出一个n位的实型数,你可以选择t次在任意位进 ...
- 【Codeforces #312 div2 A】Lala Land and Apple Trees
# [Codeforces #312 div2 A]Lala Land and Apple Trees 首先,此题的大意是在一条坐标轴上,有\(n\)个点,每个点的权值为\(a_{i}\),第一次从原 ...
- Codeforces #263 div2 解题报告
比赛链接:http://codeforces.com/contest/462 这次比赛的时候,刚刚注冊的时候非常想好好的做一下,可是网上喝了个小酒之后.也就迷迷糊糊地看了题目,做了几题.一觉醒来发现r ...
- codeforces #round363 div2.C-Vacations (DP)
题目链接:http://codeforces.com/contest/699/problem/C dp[i][j]表示第i天做事情j所得到最小的假期,j=0,1,2. #include<bits ...
随机推荐
- JavaScript的第一次小结
一. JavaScript是一种的脚本语言:特点是:具有解释性,基于对象,事件驱动,安全性和跨平台等特点 对于这几种特点有必要说明一下 解释性:就是JavaScripte本身就是一种解释性语言 基于对 ...
- 关于tab选项卡,选项的css问题。
刚开始的思路是:让上面的选中的选项背景变成白色,让下面的层position:absolute;z-index:-1;top:1px,就能盖得上上面的横线.实践证明,这样是能盖得上,但是单选按钮不能点了 ...
- Spotlights
Spotlights time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- 689D Friends and Subsequences RMQ+二分
题目大意:给出两个数组,求第一个数组区间内的最大值和第二个区间内的最小值相同的区间有多少种. 题目思路:通过预处理(O(n*Logn))后,每次查询的时间复杂度为O(1),但是如果暴力查询O(n*n) ...
- iOS多线程中performSelector
下面两段代码都在主线程中运行,我们在看别人代码时会发现有时会直接调用,有时会利用performSelector调用,今天看到有人在问这个问题,我便做一下总结, [delegate imageDownl ...
- Tinyxml封装类COperatorXml
OperatorXml.h头文件 #ifndef _OPERATOR_XML_H_ #define _OPERATOR_XML_H_ #include <string> class TiX ...
- map & flatMap 浅析
我之前一直以为我是懂 map 和 flatMap 的.但是直到我看到别人说:「一个实现了 flatMap 方法的类型其实就是 monad.」我又发现这个熟悉的东西变得陌生起来,本节烧脑体操打算更细致一 ...
- (转)Unity3D移动平台动态读取外部文件全解析
Unity3D移动平台动态读取外部文件全解析 c#语言规范 阅读目录 前言: 假如我想在editor里动态读取文件 移动平台的资源路径问题 移动平台读取外部文件的方法 补充: 回到目录 前言: 一直有 ...
- Linux设置某软件开机自动启动的方法
方法一 将启动命令写到系统启动时会自动调用的脚本中 echo "/usr/local/apache2/bin/apachectl start" >> /etc/rc.d ...
- JDBC的超时原理
1.什么是JDBC jdbc是业务系统连接数据的标准API.SUN公司一共定义了4中类型的JDBC:JDBC-ODBC桥:Native-API 驱动:Network-Protocol 驱动:Datab ...