Codeforces Round #109 (Div. 1) 题解 【ABC】
A - Hometask
题意:给你一个字符串,然后再给你k个禁止挨在一起的字符串,问你最少删除多少个字符串,使得不会有禁忌的字符串对挨在一起。题目保证每个字符最多出现在一个禁忌中。
题解:由于每个字符只会出现在一个禁忌里面,那么就说明每个询问是独立的。对于每个询问,我们贪心的去处理就好了,就连续的禁忌字符串,我们删除少的那个就好了。
#include<bits/stdc++.h>
using namespace std;
string s,s2;
int ans,a,b,m,c,d;
int main(){
cin>>s;
cin>>m;
for(int i=0;i<m;i++){
cin>>s2;
a=0,b=0;
for(int j=0;j<s.size();j++){
if(s[j]==s2[0])
a++;
else if(s[j]==s2[1])
b++;
else
ans+=min(a,b),a=0,b=0;
}
ans+=min(a,b);
}
cout<<ans<<endl;
}
B. Colliders
题意:你要实现两个功能,加x和减x。如果是加x的话,那么如果添加x的时候如果已经添加了和他不互质的数的话,那么就输出冲突。否则就加进去。
题解:我们对于每个数的因子都预处理处理啊,这个复杂度是nlogn,然后我们再用个set维护存在这个因子的数的开启个数,然后每次暴力的修改就可以了,这个复杂度是nlognlogn的。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
int v[maxn],n,m,num;
vector<int>p[maxn];
set<int> S[maxn];
string op;
void pre(){
for(int i=2;i<maxn;i++){
for(int j=i;j<maxn;j+=i){
p[j].push_back(i);
}
}
}
void add(int x){
if(v[x]==1){
printf("Already on\n");
return;
}
for(int i=0;i<p[x].size();i++){
if(S[p[x][i]].size()){
printf("Conflict with %d\n",*S[p[x][i]].begin());
return;
}
}
for(int i=0;i<p[x].size();i++){
S[p[x][i]].insert(x);
}
printf("Success\n");
v[x]=1;
}
void del(int x){
if(v[x]==0){
printf("Already off\n");
return;
}
for(int i=0;i<p[x].size();i++){
S[p[x][i]].erase(x);
}
printf("Success\n");
v[x]=0;
}
int main(){
pre();
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
cin>>op>>num;
if(op[0]=='+')
add(num);
else
del(num);
}
}
C - Double Profiles
题意:给你一个1e6个点,1e6个边的无向图,然后问你有多少对点,满足这两个点的所连接的点都完全相同。
题解:分为两种情况,(i,j)相互连接的,这样就看边左右的两个点,加上自己这个点的hash值是否相同。不相互连接的,那么显然不加上自己这个点的边集hash是一样的,那么我们排序扫一遍统计即可。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+7;
int n,m;
int g[2][maxn];
long long p[maxn],k[maxn];
int main(){
scanf("%d%d",&n,&m);
p[0]=1;
for(int i=1;i<maxn;i++)
p[i]=p[i-1]*31;
for(int i=0;i<m;i++){
scanf("%d%d",&g[0][i],&g[1][i]);
g[0][i]--,g[1][i]--;
k[g[0][i]]+=p[g[1][i]];
k[g[1][i]]+=p[g[0][i]];
}
long long ans = 0;
for(int i=0;i<m;i++){
if(k[g[0][i]]+p[g[0][i]]==k[g[1][i]]+p[g[1][i]])
ans++;
}
sort(k,k+n);
int i=0,j=1;
for(i=0;i<n;i=j){
for(j=i;k[i]==k[j]&&j<n;j++);
ans=ans+1ll*(j-i)*(j-i-1)/2;
}
cout<<ans<<endl;
}
Codeforces Round #109 (Div. 1) 题解 【ABC】的更多相关文章
- Codeforces Round #182 (Div. 1)题解【ABCD】
Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...
- 贪心 Codeforces Round #109 (Div. 2) B. Combination
题目传送门 /* 贪心:按照能选的个数和点数降序排序,当条件不符合就break,水题啊! */ #include <cstdio> #include <algorithm> # ...
- Codeforces Round #608 (Div. 2) 题解
目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...
- Codeforces Round #525 (Div. 2)题解
Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...
- Codeforces Round #528 (Div. 2)题解
Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...
- Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F
Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...
- Codeforces Round #677 (Div. 3) 题解
Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...
- Codeforces Round #665 (Div. 2) 题解
Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...
- Codeforces Round #160 (Div. 1) 题解【ABCD】
Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...
随机推荐
- centos6.5系统bash损坏之救援模式修复
1.模拟bash被损坏的情况 # mv /bin/bash /tmp [root@localhost ~]# sync [root@localhost ~]# shutdown -r now 2.挂载 ...
- centos6中iptables单机网络防火墙的使用
概述: iptables:基于软件的形式实现的一种防火墙的软件程序 Firewall:工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查,并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是 ...
- quartz在application中的使用
项目结构图: TestMain.java package com; import org.quartz.Scheduler; import org.quartz.impl.StdSchedulerFa ...
- MariaDB:删除数据库报错:error: 'Error dropping database (can't rmdir './shiro', errno: 39)'
今天在删除一个库的时候报错,如下图所示. 删除命名:mysqladmin –u root –p drop shiro 解决办法: 删除./shiro目录下面的所有文件和目录. 重新执行删除命令即可!
- wordpress更换主题未能连接到FTP服务器
报错原因:由于你的 WordPress 所在的目录没有写入权限,而wordpress安装主题或者更新时,企图通过ftp帐号进行更新,所以无法完成安装或更新 解决办法: 找到wp-config.php文 ...
- Android Menu用法全面讲解
说明:本文只介绍Android3.0及以上的Menu知识点. 菜单的分类 菜单是Android应用中非常重要且常见的组成部分,主要可以分为三类:选项菜单.上下文菜单/上下文操作模式以及弹出菜单.它们的 ...
- vue系列之项目结构
参考地址:链接 build webpack配置相关 config webpack配置相关 node_modules npm install 安装的依赖代码库 src 存放项目源码 static 存 ...
- confusion_matrix(混淆矩阵)
作者:十岁的小男孩 凡心所向,素履可往 目录 监督学习—混淆矩阵 是什么?有什么用?怎么用? 非监督学习—匹配矩阵 混淆矩阵 矩阵每一列代表预测值,每一行代表的是实际的类别.这个名字来源于它可以非常容 ...
- Java容器---字符容器StringBuffer & StringBuilder
1.字符串对象 (1)定义 ---String 字符串常量,是不可改变的量,也就是创建后就不能在修改了: --- StringBuffer 字符串变量(线程安全),StringBuffer对象的值都是 ...
- Ext.Js核心函数( 三)
ExtJs 核心函数简介 1.ExtJs提供的常用函数2.get.fly.getCmp.getDom.getBody.getDoc3.query函数和select函数4.encode函数和decode ...