A:暴力弄就好,怎么方便怎么来。      

B:我们知道最多加10次,

然后每次加1后我们求能移动的最小值,大概O(N)的效率。

 #include<bits/stdc++.h>

 using namespace std;
#define inf 0x3f3f3f
#define N 1234567 string pan(string s)//求能移动的最小字符串
{
string tmp=s;
for (int i=;i<s.size();i++)
{
string k="";
for (int j=i+;j<s.size();j++)
k+=s[j];
for (int j=;j<=i;j++)
k+=s[j];
tmp=min(tmp,k);
}
return tmp;
} int main()
{
int n;
cin>>n;
string s; cin>>s;
string ans=s;
ans=min(ans,pan(s));
for (int i=;i<=;i++)
{
for (int j=;j<s.size();j++)
{
if (s[j]=='') s[j]='';
else s[j]+=;
}
ans=min(ans,pan(s));
} cout<<ans; return ;
}

C:其实题目本意是1000*1000的矩阵,改成100*100,就有各种乱过了。

我的做法:先构造一个n*m的矩阵a[n,m];

加入s[i][j]>s[i-1][j] a[i][j]=1;

if (s[i][j]<s[i-1][j]) a[i][j]=-1;

else a[i][j]=0;

具体操作是:如果a[i][j]==-1时,说明其值小于上一行的数,于是这行就改变。去掉。

我们并用一维数组保存状态。

O(n*m)的 效率了

 #include<bits/stdc++.h>

 using namespace std;
#define inf 0x3f3f3f
#define N 1234567 int n,m;
string s[];
int a[][];
int b[]; int main()
{
cin>>n>>m;
for (int i=;i<=n;i++) cin>>s[i];
for (int i=;i<=n;i++)
{
for (int j=;j<m;j++){
if (s[i][j]>s[i-][j]) a[i][j+]=;
else if (s[i][j]<s[i-][j]) a[i][j+]=-;
}
} int ans=;
for (int j=;j<=m;j++)
{
int flag=;
for (int i=;i<=n;i++)
if (a[i][j]==-&&b[i]==)//说明这一行前面比较的状态
{
flag=;
ans++;
break;
}
if (!flag)
{
for (int i=;i<=n;i++)
if (a[i][j]==) b[i]=;
}
} cout<<ans; return ;
}

E:鉴于一直在想E,发现set用法不太会。

其实本省做法也有各种问题。

于是看了前人代码:

大概思路:

先把n,m个问题和人数全加入vector<node>数组

node 记入左区间L,右区间R,还有一个位置pos,以及type类型代表其实询问,还是能选择的人。

自定义排序,以及构造。。

排序的关键是先按L排序,再按type 排序

然后对于是询问我们二分查找在set里面,否侧插入在set中,

还有保存k的状态,如果k==0的话 就从set中删去。

这里用到贪心的方法,前面我们已排好顺序,所以对于询问l[i],r[i],我们查找的时候一定是在L<=l[i]z中找的,

且找的一定是R最接近r[i]的值。这里好好体会一下。

描述的比价混乱:

具体代码应该了解这种思路

 #include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<set>
#include<vector> using namespace std;
typedef long long ll;
#define N 234567
#define mp make_pair
struct node
{
int l,r,id,type;
node(int l=,int r=,int id=,int type=):l(l),r(r),id(id),type(type){} bool operator < (node b)const{
if (l==b.l) return type<b.type;
return l<b.l;
}
}; int n,m;
int lt[N],rt[N];
vector<node> v;
int k[N],ans[N]; set<pair<int,int> > s;
set<pair<int,int> >::iterator it; int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
v.push_back(node(x,y,i,));
} scanf("%d",&m);
for (int i=;i<=m;i++)
{
scanf("%d%d%d",&lt[i],&rt[i],&k[i]);
v.push_back(node(lt[i],rt[i],i,)); } sort(v.begin(),v.end());
for (int i=;i<v.size();i++)
{
if (v[i].type==)
s.insert(mp(v[i].r,v[i].id)); else
{
it=s.lower_bound(mp(v[i].r,));
if (it==s.end())
{
puts("NO");
return ;
}
int tmp=it->second;
ans[v[i].id]=tmp;
s.erase(it);
k[tmp]--;
if (k[tmp]) s.insert(mp(rt[tmp],tmp));
} }
puts("YES");
for (int i=;i<=n;i++)
printf("%d ",ans[i]); return ;
}

Codeforces Round #283 (Div. 2)的更多相关文章

  1. 暴力+构造 Codeforces Round #283 (Div. 2) C. Removing Columns

    题目传送门 /* 题意:删除若干行,使得n行字符串成递增排序 暴力+构造:从前往后枚举列,当之前的顺序已经正确时,之后就不用考虑了,这样删列最小 */ /*********************** ...

  2. 构造+暴力 Codeforces Round #283 (Div. 2) B. Secret Combination

    题目传送门 /* 构造+暴力:按照题目意思,只要10次加1就变回原来的数字,暴力枚举所有数字,string大法好! */ /************************************** ...

  3. Codeforces Round #283 (Div. 2) C. Removing Columns 暴力

    C. Removing Columns time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. Codeforces Round #283 (Div. 2) A ,B ,C 暴力,暴力,暴力

    A. Minimum Difficulty time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  5. Codeforces Round #283 Div.2 D Tennis Game --二分

    题意: 两个人比赛,给出比赛序列,如果为1,说明这场1赢,为2则2赢,假如谁先赢 t 盘谁就胜这一轮,谁先赢 s 轮则赢得整个比赛.求有多少种 t 和 s 的分配方案并输出t,s. 解法: 因为要知道 ...

  6. codeforces 497c//Distributing Parts// Codeforces Round #283(Div. 1)

    题意:有n个区间[ai,bi],然后有n个人落在[ci,di],每个人能用ki次.问一种方式站满n个区间. 两种区间都用先x后y的升序排序.对于当前的区间[ai,bi],将ci值小于当前ai的全部放入 ...

  7. codeforces 497b// Tennis Game// Codeforces Round #283(Div. 1)

    题意:网球有一方赢t球算一场,先赢s场的获胜.数列arr(长度为n)记录了每场的胜利者,问可能的t和s. 首先,合法的场景必须: 1两方赢的场数不一样多. 2赢多的一方最后一场必须赢. 3最后一场必须 ...

  8. Codeforces Round #283 (Div. 2) B. Secret Combination 暴力水题

    B. Secret Combination time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  9. Codeforces Round #283 (Div. 2) A. Minimum Difficulty 暴力水题

    A. Minimum Difficulty time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

随机推荐

  1. [php]如何更改wamp默认的mysq空密码?

    最近刚开始学php,爬坑中.上午看了会儿书,下了个源码,把文件部署到www下之后,也导入了sql文件,但是进入之后显示 = =  一开始不知道是什么.后来百度之后发现是mysql的问题,应该是源码中p ...

  2. Microsoft Power BI Designer

    1/25/2015年1月25发布的预览版本,可以通过以下地址下载,注意有x64 和x32 版本区别(和上次PowerMap一样,一般也推荐的使用x64版本) http://www.microsoft. ...

  3. Swing基础

    Swing基础 JFrame JPanel 绘图:paint 监听事件: ActionListener  KeyListener Listener和Adapter 计时器:Timer     Time ...

  4. python2 编码问题详解

    实例对比 定义 type str unicode print encode('utf8') decode('utf8') encode('unicode-escape') encode('string ...

  5. 源码解析之setContentView

    分享一下我以前学习时做到PPT中的一部分. 不难看出其实设置布局是由PhoneWindow来完成的. 然而我们要记住DecorView: 包括:状态栏,标题栏,内容 phoneWindow -> ...

  6. mvc中使用knockoutjs和ajax

    虽然说knockoutjs 官网上写的非常的清楚!但是像我这样的英语呕吐患者,真是虐心啊!今天我写下做个记录,也为那些初次使用的同学给予帮助, 首先我说一下今天我说的内容只是应用不做原理探究,如果没有 ...

  7. iOS 七大手势之轻拍,长按,旋转手势识别器方法

    一.监听触摸事件的做法   如果想监听一个view上面的触摸事件,之前的做法通常是:先自定义一个view,然后再实现view的touches方法,在方法内部实现具体处理代码 通过touches方法监听 ...

  8. 兼容sdk7&iOS7的issue解决小片段总结

    ios7新增加的icon尺寸: 76 x 76:Size for iPad 2 and iPad mini (standard resolution) 120 x 120 :Size for iPho ...

  9. 4 我们的第一个c#程序

    1.       控制台应用程序. 在我们这个培训中主要使用控制台应用程序来讲解知识点和做练习. 什么是控制台程序? 控制台程序运行在dos窗口.没有可视化的界面.可以通过Dos窗口进入输入和输出显示 ...

  10. VHDL----基础知识1

    摘要: 打算分几篇,来理清VHDL的基础知识 ----------------------------------------------------------------------------- ...