最近好像总是有点不想打,专题也刷不动,还是坚持这做了一场,虽然打到一半就没打了。。。(反正通常都只能做出两题)

感觉自己切水题越来越熟练了,然而难题还是不会做。。

A题,水,用vector存下来就行了

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f; int main()
{
ios::sync_with_stdio(false);
cin.tie();
string la,lb;
cin>>la>>lb;
vector<pair<string,string> >v;
v.push_back(make_pair(la,lb));
int n;
cin>>n;
for(int i=;i<n;i++)
{
string a,b;
cin>>a>>b;
if(a==la)
{
v.push_back(make_pair(lb,b));
la=lb,lb=b;
}
else
{
v.push_back(make_pair(la,b));
la=la,lb=b;
}
}
for(int i=;i<v.size();i++)
cout<<v[i].first<<" "<<v[i].second<<endl;
return ;
}

A

B题,很水的染色问题,如果,一个数是另一个数 的素因子,那么这两个数染的色不能相同,刚开始因为是因子wa了一发

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f; int color[N];
bool vis[N];
void prime()
{
memset(color,,sizeof color);
memset(vis,,sizeof vis);
for(int i=;i<N;i++)
{
if(vis[i]==)
{
int k=;
color[i]=;
for(int j=*i;j<N;j+=i)
{
vis[j]=;
if(color[j]==)color[j]=;
}
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
prime();
int n;
cin>>n;
set<int>ans;
for(int i=;i<=n+;i++)
ans.insert(color[i]);
cout<<ans.size()<<endl;
for(int i=;i<=n+;i++)
cout<<color[i]<<" ";
return ;
}

B

C题,先求出前缀和,然后就有sum[i]-k^t=sum[j],把sum[i]用map存起来,然后枚举k^t看sum[i]-k^t是不是在map中,要边加边存,如果全部存起来再算的话会wa,我也不知道是为什么。。

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f; ll a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie();
ll n,k;
cin>>n>>k;
for(ll i=;i<=n;i++)cin>>a[i];
map<ll,ll>m;
m[]=;
for(ll i=;i<=n;i++)a[i]+=a[i-];
ll ans=;
set<ll>s;
set<ll>::iterator j;
for(ll i=;i<;i++)
{
if(pow(k,i)>1e14||pow(k,i)<-1e14)break;
s.insert((ll)pow(k,i));
}
for(ll i=;i<=n;i++)
{
for(j=s.begin();j!=s.end();j++)
ans+=m[a[i]-*j];
m[a[i]]++;
}
cout<<ans<<endl;
return ;
}

C

D题,2-sat没学啊,那就并查集吧,分成两棵树

如果门是开的,则2个开关要么都关要么都开,Merge(d[i][0],d[i][1]),Merge(d[i][0]+m,d[i][1]+m);

否则只开其中一个, Merge(d[i][0]+m,d[i][1]),Merge(d[i][0],d[i][1]+m);

最后扫一遍并查集,如果 存在至少一个开关的点 i 和 i+m处在同一颗树上,则开关即开有关,相矛盾,故不存在可行方案,否则存在。

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<cassert>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f; int father[N*],a[N];
vector<int>d[N];
inline int Find(int x)
{
if(x!=father[x])
{
father[x]=Find(father[x]);
}
return father[x];
}
void Merge(int x,int y)
{
x=Find(x);
y=Find(y);
father[x]=y;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int n,m;
cin>>n>>m;
for(int i=;i<*m;i++)father[i]=i;
for(int i=;i<=n;i++)cin>>a[i];
for(int i=;i<m;)
{
int x;
cin>>x;
for(int j=;j<x;j++)
{
int p;
cin>>p;
d[p].push_back(i);
}
if(!x)--m;
else i++;
}
for(int i=;i<=n;i++)
{
if(a[i])Merge(d[i][],d[i][]),Merge(d[i][]+m,d[i][]+m);
else Merge(d[i][]+m,d[i][]),Merge(d[i][],d[i][]+m);
}
for(int i=;i<m;i++)
{
if(Find(i)==Find(i+m))
{
cout<<"NO"<<endl;
return ;
}
}
cout<<"YES"<<endl;
return ;
}

D

Codeforces Round #400的更多相关文章

  1. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem 2-SAT

    题目链接:http://codeforces.com/contest/776/problem/D D. The Door Problem time limit per test 2 seconds m ...

  2. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) A map B贪心 C思路前缀

    A. A Serial Killer time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  3. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) A

    Our beloved detective, Sherlock is currently trying to catch a serial killer who kills a person each ...

  4. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined)

    前四题比较水,E我看出是欧拉函数傻逼题,但我傻逼不会,百度了下开始学,最后在加时的时候A掉了 AC:ABCDE Rank:182 Rating:2193+34->2227 终于橙了,不知道能待几 ...

  5. 【2-SAT】【并查集】ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem

    再来回顾一下2-SAT,把每个点拆点为是和非两个点,如果a能一定推出非b,则a->非b,其他情况同理. 然后跑强连通分量分解,保证a和非a不在同一个分量里面. 这题由于你建完图发现都是双向边,所 ...

  6. 【枚举】【前缀和】【map】ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C. Molly's Chemicals

    处理出前缀和,枚举k的幂,然后从前往后枚举,把前面的前缀和都塞进map,可以方便的查询对于某个右端点,有多少个左端点满足该段区间的和为待查询的值. #include<cstdio> #in ...

  7. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D

    Moriarty has trapped n people in n distinct rooms in a hotel. Some rooms are locked, others are unlo ...

  8. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C

    Molly Hooper has n different kinds of chemicals arranged in a line. Each of the chemicals has an aff ...

  9. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) B

    Sherlock has a new girlfriend (so unlike him!). Valentine's day is coming and he wants to gift her s ...

随机推荐

  1. Yarn架构

    jobtracker存在单点故障问题 jobtracker只支持mapreduce,计算框架不具有可扩展性 jobtracker是性能瓶颈 yarn可以整合不同的计算框架,提高资源利用率 yarn的基 ...

  2. openocd shell脚本

    openocd.sh #! /usr/bin/expectset timeout 30spawn suexpect "密码:"send "123456\r"se ...

  3. Druid学习之路 (三)Druid的数据源和段

    作者:Syn良子 出处:https://www.cnblogs.com/cssdongl/p/9703204.html 转载请注明出处 Druid的数据源和分段 Druid的数据存储在"Da ...

  4. HBuilder 详细使用方法 -------------参考 :http://www.runoob.com/w3cnote/hbuilder-intro.html

    HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE.HBuilder的编写用到了Java.C.Web和Ruby.HBuilder本身主体是由Java编写,它基于Ecl ...

  5. 使用.NET Core和Vue搭建WebSocket聊天室

    博客地址是:https://qinyuanpei.github.io.  WebSocket是HTML5标准中的一部分,从Socket这个字眼我们就可以知道,这是一种网络通信协议.WebSocket是 ...

  6. ISO8583

    最开始时,金融系统只有IBM这些大的公司来提供设备,象各种主机与终端等.在各个计算机设备之间,需要交换数据.我们知道数据是通过网络来传送的,而在网络上传送的数据都是基于0或1这样的二进制数据,如果没有 ...

  7. ipythons 使用攻略

    ipython是一个 python 的交互式 shell,比默认的 python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 安 ...

  8. Thinkphp5.0实战开发二------自动生成目录结构

    序言 ThinkPHP5.0 具备自动创建功能,可以用来自动生成需要的模块及目录结构和文件等,自动生成主要调用\think\Build 类库.ThinkPHP5.0中模块文件夹在application ...

  9. 20145240《网络对抗》PC平台逆向破解_advanced

    PC平台逆向破解_advanced shellcode注入 Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限.另外,Shellcode一般是 ...

  10. HAL编译问题

    1 make:进入目录'/opt/FriendlyARM/tiny4412/android/android-4.1.2'make: *** 没有规则可以创建“out/target/product/ge ...