Codeforces Round #283 (Div. 2)
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",<[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)的更多相关文章
- 暴力+构造 Codeforces Round #283 (Div. 2) C. Removing Columns
题目传送门 /* 题意:删除若干行,使得n行字符串成递增排序 暴力+构造:从前往后枚举列,当之前的顺序已经正确时,之后就不用考虑了,这样删列最小 */ /*********************** ...
- 构造+暴力 Codeforces Round #283 (Div. 2) B. Secret Combination
题目传送门 /* 构造+暴力:按照题目意思,只要10次加1就变回原来的数字,暴力枚举所有数字,string大法好! */ /************************************** ...
- 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 ...
- 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 ...
- Codeforces Round #283 Div.2 D Tennis Game --二分
题意: 两个人比赛,给出比赛序列,如果为1,说明这场1赢,为2则2赢,假如谁先赢 t 盘谁就胜这一轮,谁先赢 s 轮则赢得整个比赛.求有多少种 t 和 s 的分配方案并输出t,s. 解法: 因为要知道 ...
- codeforces 497c//Distributing Parts// Codeforces Round #283(Div. 1)
题意:有n个区间[ai,bi],然后有n个人落在[ci,di],每个人能用ki次.问一种方式站满n个区间. 两种区间都用先x后y的升序排序.对于当前的区间[ai,bi],将ci值小于当前ai的全部放入 ...
- codeforces 497b// Tennis Game// Codeforces Round #283(Div. 1)
题意:网球有一方赢t球算一场,先赢s场的获胜.数列arr(长度为n)记录了每场的胜利者,问可能的t和s. 首先,合法的场景必须: 1两方赢的场数不一样多. 2赢多的一方最后一场必须赢. 3最后一场必须 ...
- 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 ...
- 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 ...
随机推荐
- 安装Google框架服务并突破Google Play下载限制
请注明出处:http://www.cnblogs.com/killerlegend/p/3546235.html Written By KillerLegend 关于谷歌服务框架以及安装 安装前请先获 ...
- Delphi CxGrid 汇总(3)
列 解决: <aColumn>.GroupIndex := -1; <aColumn>.Visible := True; *** ...
- UCOS2_STM32F1移植详细过程(四)
Ⅰ.概述 上一篇文章是讲述uC/OS-II Ports下面os_cpu_a.asm.os_cpu_c.c和os_cpu.h文件底层端口代码的移植(修改)和说明,接着上一篇文章来讲述关于UCOS移植应用 ...
- C#调用sap接口及返回数据到sap
public class SapClass { /// <summary> /// /// </summary> /// <param name="fphm&q ...
- VC中实现GCC的2个比较常用的位运算函数
在GCC中内嵌了两个位运算的函数,但在VC中并没有这两个函数(有相似函数). //返回前导的0的个数. int __builtin_clz (unsigned int x) //返回后面的0个个数,和 ...
- 常用的PC/SC接口函数
PC/SC规范是一个基于WINDOWS平台的一个标准用户接口(API),提供了一个从个人电脑(Personal Computer)到智能卡(SmartCard)的整合环境,PC/SC规范建立在工业标准 ...
- Android 编译使用高版本的Java
讨论的链接 http://bbs.csdn.net/topics/390977000 问题很容易解决,就是sdk\tools\ant\build.xml里面的配置不对,把 <property n ...
- 在windows上使用symfony创建简易的CMS系统(一)
http://blog.csdn.net/kunshan_shenbin/article/details/7164675 参考自:http://xsymfony.801.cxne.net/forum. ...
- EF4.1之贪婪加载和延迟加载
默认情况下,EF4.1是只查询到涉及到的数据对象,但是EF4.1支持两种方法进行控制其加载: 1.贪婪加载 2.延迟加载 使用的表还是上次使用的Order 和 OrderDetails两张表来举例说明 ...
- [shell基础]——awk命令
关于awk awk是一个强大的文本分析工具,相对于grep的查找.sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大. 简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开 ...