本文整理汇总了C++中vi::erase方法的典型用法代码示例。如果您正苦于以下问题:C++ vi::erase方法的具体用法?C++ vi::erase怎么用?C++ vi::erase使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类vi
的用法示例。
在下文中一共展示了vi::erase方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sol
void sol(){
if(s2<s1){
vi t=a;a=b;b=t;
ll x=s1;s1=s2;s2=x;
t=ida;ida=idb;idb=t;
fliped=!fliped;
}
if(a.empty() || b.empty())return ;
if(abs(s1-s2)==0){return ;}
ll diff = abs(s2 - s1);
ll Y = diff;
int x,y;
x=y=0;
// printf("diff = %lld\n",diff);
for (int i = 0; i < a.size(); ++i) {
vi::iterator it = lower_bound(b.begin(), b.end(), diff/2 + a[i]);
int j = it-b.begin();
if(j && j == b.size())j--;
// printf("i,j=%d,%d\n",i,j);
ll ns1 = s1 - a[i] + b[j];
ll ns2 = s2 - b[j] + a[i];
// printf("debug a[%d] = %d b[%d] = %d\n",i,a[i],j,b[j]);
// printf("debug ns1 = %lld ns2 = %lld\n",ns1,ns2);
if(abs(ns1 - ns2) < Y){
x = i;
y = j;
// printf("debug %d %d\n",x,y);
Y = abs(ns1 - ns2);
}
}
if(Y<diff){
// printf("swaping a[%d] b[%d] diff = %lld\n", x,y, Y);
if(fliped)
ans.push_back(ii(idb[y],ida[x]));
else
ans.push_back(ii(ida[x],idb[y]));
s1 = s1 - a[x] + b[y];
s2 = s2 + a[x] - b[y];
}
// printf("x,y = %d %d\n",x,y);
a.erase(move(a,x));
ida.erase(move(ida,x));
b.erase(move(b,y));
idb.erase(move(idb,y));
}
示例2: convex_hull
void convex_hull(vector<Point> & a) {
if (a.size() == 1)
return;
sort(a.begin(), a.end(), &cmp);
Point p1 = a[0], p2 = a.back();
vector<Point> up, down;
up1.clear();
down1.clear();
up.push_back(p1); up1.pb(0);
down.push_back(p1); down1.pb(0);
for (size_t i = 1; i < a.size(); ++i) {
if (i == a.size() - 1 || ccw(p1, a[i], p2)) {
while (up.size() >= 2 && !ccw(up[up.size() - 2], up[up.size() - 1], a[i]))
up.pop_back(),up1.pop_back();
up.push_back(a[i]),up1.push_back(i);
}
if (i == a.size() - 1 || cw(p1, a[i], p2)) {
while (down.size() >= 2 && !cw(down[down.size() - 2], down[down.size() - 1], a[i]))
down.pop_back(),down1.pop_back();
down.push_back(a[i]),down1.push_back(i);
}
}
if (up[0].x == up.back().x && up[0].y == up.back().y)
up.erase(up.end() - 1),up1.erase(up1.end()-1);
a.clear();a1.clear();
for (size_t i = 0; i < up.size(); ++i)
a.push_back(up[i]),a1.push_back(up1[i]);
for (size_t i = down.size() - 2; i > 0; --i)
a.push_back(down[i]),a1.push_back(down1[i]);
}
示例3: main
int main()
{
FILE *in = fopen (PROBLEM_NAME".in","r");
FILE *out = fopen (PROBLEM_NAME".out","w");
int k;
fscanf(in, "%d %d ", &n, &k);
for (int i = 0; i < n; ++i) {
used.push_back(false);
tin.push_back(0);
fup.push_back(0);
vi l;
g.push_back(l);
}
for (int i = 0; i < k; ++i) {
int x, y;
fscanf(in, "%d %d ", &x, &y);
g[x-1].push_back(y-1);
g[y-1].push_back(x-1);
}
timer = 0;
dfs(0);
sort(ans.begin(), ans.end());
ans.erase( unique( ans.begin(), ans.end() ), ans.end() );
fprintf(out, "%d\n", (int)ans.size());
for (size_t i = 0; i < ans.size(); ++i) {
fprintf(out, "%d\n", ans[i]+1);
}
fclose(in);
fclose(out);
return 0;
}
示例4: hapusRadius
void hapusRadius(vi & Lingkaran, int inp){
vi::const_iterator a = Lingkaran.begin();
for (vi::const_iterator i = Lingkaran.begin(); i<Lingkaran.end();++i){
if (*i == inp){
Lingkaran.erase(Lingkaran.begin()+(i-a));
i=Lingkaran.end();
}
}
}
示例5: eat
bool eat(vi &initial, int from, int limit_left, int goal, bool reversed, bool variation){
int size = initial.size();
int new_eaten, eaten_r, eaten_l;
bool cond_left, cond_right;
cond_left = (from-1 > limit_left) && (initial[from] > initial[from-1]);
cond_right = (from+1 < size) && (initial[from] > initial[from+1]);
// There could be a better in front
if(variation && (cond_left || cond_left) && from + 1 < size && initial[from+1] > initial[from]) from++;
cond_left = (from-1 > limit_left) && (initial[from] > initial[from-1]);
cond_right = (from+1 < size) && (initial[from] > initial[from+1]);
if(cond_left){
new_eaten = initial[from-1] + initial[from];
initial.erase(initial.begin()+(from-1));
initial[from-1] = new_eaten;
if(reversed){
moves.push_back(si("R",size-from));
}else{
moves.push_back(si("L",from+1));
}
return true;
}
if(cond_right){
new_eaten = initial[from+1] + initial[from];
initial.erase(initial.begin()+(from+1));
initial[from] = new_eaten;
if(reversed){
moves.push_back(si("L",size-from));
}else{
moves.push_back(si("R",from+1));
}
return true;
}
return false;
}
示例6: call
int call(int time,int mx)
{
// if(dp[time][mx]!=-1) return dp[time][mx];
if(time>maxt)
return INF;
sort(ALLR(v));
if(v[0]<=0) {debug(time);return time;}
int p1=INF,p2=INF;
for(int i=0;i<v.size();i++)
{
v[i]--;
}
p1=call(time+1,v[0]-1);
for(int i=0;i<v.size();i++)
{
v[i]++;
}
vi temp;
temp=v;
int i=v[0];
int cnt=0;
if(i%2==0)
{
int vag=i/2;
while(v[0]==i)
{
v.erase(v.begin());
v.PB(vag);
v.PB(vag);
time++;
cnt++;
}
}
else if(i%2==1)
{
int vag=i/2;
while(v[0]==i)
{
v.erase(v.begin());
v.PB(vag);
v.PB(vag+1);
time++;
cnt++;
}
}
sort(ALLR(v));
p2=call(time,v[0]);
v=vi();
v=temp;
// vi :: iterator it;
// if(i%2==0)
// {
// int vag=i/2;
// while(cnt--)
// {
// it=find(ALL(v),vag);
// v.erase(it);
// it=find(ALL(v),vag);
// v.erase(it);
// v.PB(i);
// }
// }
return (min(p1,p2));
}