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. CentOS7.0安装JDK1.8.0_31

    1.检查一下系统中的jdk版本 $>java -version java version "1.7.0_"OpenJDK Runtime Environment (IcedT ...

  2. 关于Raw,Assets的使用

    Raw,Assets下文件区别: 相同点:两个目录下的文件在打包后都会原封不动的保存到apk中,不会被编译成二进制. 不同点:Raw下文件不能使用目录结构, 有些格式的会被压缩,能够通过R.raw方便 ...

  3. delphi 2010是动画GIF的支持方法

    下面delphi 2010是动画GIF的支持方法:  1.在窗体上放一个Image1控件.注意:这时设置其Picture属性,加载一幅动画GIF是不会动画显示的.  2.在窗体的FormCreate事 ...

  4. 使用RMAN验证备份的有效性

    --验证控制文件和参数文件: RMAN> restore validate controlfile; Starting allocated channel: ORA_DISK_1 channel ...

  5. Bash美化

    首先声明下,这些美化方式都不是我自己想的,而是多个牛人的方法. 第一:简单点 这个方法来自于:http://www.vimer.cn/?p=1554 没有美化前是这样,鼠标光标在很右边: 在.bash ...

  6. SQL开发 循序渐进

    吉庆师傅整理: http://www.itpub.net/thread-1418150-1-1.html

  7. 使用Handler和Timer+Timertask实现简单的图片轮播

    布局文件就只放了一个简单的ImageView,就不展示了. 下面是Activity package com.example.administrator.handlerthreadmessagedemo ...

  8. Bing Speech Recognition 标记

    Bing Speech Services Bing   Bing Speech Services provide speech capabilities for Windows and Windows ...

  9. linux之iptables总结

    netfilter/iptables概述:     netfilter/iptables是Linux内核防火墙架构,由netfilter实现功能,由iptables提供接口.     iptables ...

  10. RTFM

    RTFM是一个网络语言,意思是:“去读那些他妈的手册”(Read The Fucking Manual),这句话通常用在回复那些只要查阅文件就可以解决,拿出来提问只是浪费别人时间的问题.