cf1191 解题报告

A-简单模拟

脑内算出来让计算机输出

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
int x;
cin>>x;
if(x%4==0) return puts("1 A"),0;
if(x%4==1) return puts("0 A"),0;
if(x%4==2) return puts("1 B"),0;
if(x%4==3) return puts("2 A"),0;
return 0;
}

B-细节模拟

脑内算出来让计算机输出。wa了几发、、、

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n;
string a[4];
int main() {
cin>>a[1]>>a[2]>>a[3];
sort(a+1,a+1+3);
if(a[1]==a[2]&&a[2]==a[3]) return puts("0"),0;
if(a[1][1]==a[2][1] and a[1][1]==a[3][1]) {
int x=a[1][0]-'0',y=a[2][0]-'0',z=a[3][0]-'0';
int b[44];
b[1]=x,b[2]=y,b[3]=z;
sort(b+1,b+1+3);
if(b[1]+1==b[2]&&b[2]+1==b[3]) return puts("0"),0;
}
int x=a[1][0]-'0',y=a[2][0]-'0',z=a[3][0]-'0';
if(a[1][1]==a[2][1])
if(abs(x-y)<=2) return puts("1"),0;
if(a[1][1]==a[3][1])
if(abs(x-z)<=2) return puts("1"),0;
if(a[2][1]==a[3][1])
if(abs(y-z)<=2) return puts("1"),0;
puts("2");
return 0;
}

C-模拟

每次暴力模拟就行,(a[l]-l+1)%k为当前在块内的初始位置。

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+7;
int n,a[N],m,k;
signed main() {
cin>>n>>m>>k;
for(int i=1;i<=m;++i) cin>>a[i];
sort(a+1,a+1+m);
int ans=0,l=1;
while(l<=m) {
int j=(a[l]-l+1)%k;
if(!j) j=k;
while(j+(a[l+1]-a[l])<=k&&l<=m) l++,j+=a[l]-a[l-1];
l++,ans++;
}
cout<<ans;
return 0;
}

D-博弈

一条线上有n个点,点点之间不能占同一个位置。

先把开始就输的结果判掉。

之后的局面就要是0~n-1的排列了。

博弈是真的不会o(╥﹏╥)o

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+7;
int n,a[N],sum;
signed main() {
cin>>n;
for(int i=1;i<=n;++i) cin>>a[i],sum+=a[i];
sort(a+1,a+1+n);
int flag=0;
for(int i=1;i<n;++i)
if(a[i]==a[i+1])
if(a[i]==0||(i>1&&a[i-1]+1==a[i])||++flag>1)
return puts("cslnb"),0;
int las=sum-n*(n-1)/2;
if(las&1) puts("sjfnb");
else puts("cslnb");
return 0;
}

E-博弈

咕咕咕

F-数据结构

离散化后,枚举a的位置。

然后考虑一行的贡献。

把此行及其以上的点压缩到数轴上。

贡献显然产生在有此行的点的区间内,计算出来区间个数就是此行的贡献。

因为不在此行的话,上面已经统计过了。

具体统计的话,就是总的区间-不包含的小区间。

统计用BIT就OK。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+7;
int n,b[N],lsh[2][N];
struct node {
int first,second;
bool operator < (const node &b) const {
return first==b.first?second<b.second:first>b.first;
}
}a[N];
namespace BIT {
int sum[N];
int lowbit(int x) {return x&-x;}
void add(int x) {for(int i=x;i<=n;i+=lowbit(i)) sum[i]++;}
int query(int x) {int ans=0;for(int i=x;i>=1;i-=lowbit(i)) ans+=sum[i];return ans;}
}
int main() {
scanf("%d",&n);
for(int i=1;i<=n;++i) {
scanf("%d%d",&a[i].second,&a[i].first);
lsh[0][i]=a[i].first;
lsh[1][i]=a[i].second;
}
sort(lsh[0]+1,lsh[0]+1+n);
sort(lsh[1]+1,lsh[1]+1+n);
int len[2];
len[0]=unique(lsh[0]+1,lsh[0]+1+n)-lsh[0]-1;
len[1]=unique(lsh[1]+1,lsh[1]+1+n)-lsh[1]-1;
for(int i=1;i<=n;++i) {
a[i].first=lower_bound(lsh[0]+1,lsh[0]+1+len[0],a[i].first)-lsh[0];
a[i].second=lower_bound(lsh[1]+1,lsh[1]+1+len[1],a[i].second)-lsh[1];
}
sort(a+1,a+1+n);
ll ans=0;
for(int i=len[0],now=0,tmp=0,gs=0;i>=1;--i) {
int las=0;
while(a[now+1].first==i&&now+1<=n) {
now++;
tmp=BIT::query(a[now].second-1)-BIT::query(las);
ans-=1LL*tmp*(tmp+1)/2;
if(!b[a[now].second]) {
BIT::add(a[now].second);
b[a[now].second]=1;
gs++;
}
las=a[now].second;
}
tmp=gs-BIT::query(las);
ans-=1LL*tmp*(tmp+1)/2;
ans+=1LL*gs*(gs+1)/2;
}
cout<<ans<<"\n";
return 0;
}

cf1191 解题报告的更多相关文章

  1. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  2. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  3. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  4. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  5. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  6. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

  7. 习题:codevs 1519 过路费 解题报告

    今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...

  8. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

  9. LeetCode 解题报告索引

    最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中......                        ...

随机推荐

  1. Kafka MirrorMaker 跨集群同步工具

    一.MirrorMaker介绍 MirrorMaker是Kafka附带的一个用于在Kafka集群之间制作镜像数据的工具.该工具从源集群中消费并生产到目标群集.这种镜像的常见用例是在另一个数据中心提供副 ...

  2. springMVC执行流程及架构

    目录 springMVC简单执行流程 springMVC框架 注解实现 springMVC简单执行流程 springMVC框架 执行流程: 1.用户发送请求至前端控制器DispatcherServle ...

  3. Python语言控制运算的优先级

    Python语言碰上计算式同时出现在一个指令内时,除了括号"(".")"最优外,其余计算优先次序如下: 次方(**). 乘法.除法.求余数(%).求整数(//) ...

  4. Springboot揭秘-快速构建微服务体系-王福强-2016年5月第一次印刷

    JavaConfig项目: spring IOC有一个非常核心的概念——Bean.由Spring容器来负责对Bean的实例化,装配和管理.XML是用来描述Bean最为流行的配置方式.Spring可以从 ...

  5. tomcat重启session不失效问题

    本地写代码每次重启都要重新登录浪费了很多时间,如何重启不用重新登录呢,只要让tomcat在关闭时将session写入文件中,在启动时从文件中读取session即可. 只需在conf/context.x ...

  6. vue路由切换时内容组件的滚动条回到顶部

    在使用vue的时候会出现切换路由的时候滚动条保持在原来的位置,要切换路由的时候滚动条回到顶部才有更好的用户体验 1.当页面整体都要滚动到顶部的情况 router.afterEach(() => ...

  7. memcpy函数的实现

    1.按1个字节拷贝 (1)不要直接使用形参,要转换成char* (2)目标地址要实现保存 (3)要考虑源和目标内存重叠的情况 void * mymemcpy(void *dest, const voi ...

  8. java 8大happen-before原则

    1.单线程happen-before原则:在同一个线程中,书写在前面的操作happen-before后面的操作. 2.锁的happen-before原则:同一个锁的unlock操作happen-bef ...

  9. Linux 环境变量配置(Nodejs/MongoDB/JDK/Nginx)

    一.环境变量配置 注:配置环境变量的文件 全局变量(系统级别): /etc/bashrc /etc/profile /etc/environment 用户变量(用户级别): ~/.bash_profi ...

  10. Oracle数据库中 =:和 :=

    =:应该相当于 a = :b 表明b是个绑定变量,需要执行时进行变量绑定. 变量绑定:变量绑定是指在sql语句的条件中使用变量而不是常量.比如shared pool里有两条sql语句,select * ...