SGU 404

题意:。。

收获:取模

#include<bits/stdc++.h>
#define de(x) cout<<#x<<"="<<x<<endl;
#define dd(x) cout<<#x<<"="<<x<<" ";
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define repd(i,a,b) for(int i=a;i>=(b);--i)
#define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
#define ll long long
#define mt(a,b) memset(a,b,sizeof(a))
#define fi first
#define se second
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define pdd pair<double,double>
#define pdi pair<double,int>
#define mp(u,v) make_pair(u,v)
#define sz(a) (int)a.size()
#define ull unsigned long long
#define ll long long
#define pb push_back
#define PI acos(-1.0)
#define qc std::ios::sync_with_stdio(false)
#define db double
#define all(a) a.begin(),a.end()
const int mod = 1e9+7;
const int maxn = 1e2+5;
const double eps = 1e-6;
using namespace std;
bool eq(const db &a, const db &b) { return fabs(a - b) < eps; }
bool ls(const db &a, const db &b) { return a + eps < b; }
bool le(const db &a, const db &b) { return eq(a, b) || ls(a, b); }
ll gcd(ll a,ll b) { return a==0?b:gcd(b%a,a); };
ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
ll kpow(ll a,ll b) {ll res=1;a%=mod; if(b<0) return 1; for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll read(){ll x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
//inv[1]=1;
//for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
int main(){string s[maxn];int n,m;cin>>n>>m;rep(i,1,m+1) cin>>s[i];cout<<s[n%m==0?m:n%m];return 0;
}

View Code

SGU 404

题意:给你n个人,每个人都有si和bi,两个人会打架(si>=sj&&bi<=bj || si<=sj&&bi>=bj),然后让你邀请最多的人数

里面的所有人都不能打架

收获:反过来想,就是两个人能同时出现的就是其中一个人的s和b都严格大于另一个人的s和b,那我们排完序之后就是

一个lis的问题了

下面是一个我wa了很久的代码,

反例:

5
1 1
2 9
3 4
5 5
1 1

#include<bits/stdc++.h>
#define de(x) cout<<#x<<"="<<x<<endl;
#define dd(x) cout<<#x<<"="<<x<<" ";
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define repd(i,a,b) for(int i=a;i>=(b);--i)
#define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
#define ll long long
#define mt(a,b) memset(a,b,sizeof(a))
#define fi first
#define se second
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define pdd pair<double,double>
#define pdi pair<double,int>
#define mp(u,v) make_pair(u,v)
#define sz(a) (int)a.size()
#define ull unsigned long long
#define ll long long
#define pb push_back
#define PI acos(-1.0)
#define qc std::ios::sync_with_stdio(false)
#define db double
#define all(a) a.begin(),a.end()
const int mod = 1e9+7;
const int maxn = 1e5+5;
const double eps = 1e-6;
using namespace std;
bool eq(const db &a, const db &b) { return fabs(a - b) < eps; }
bool ls(const db &a, const db &b) { return a + eps < b; }
bool le(const db &a, const db &b) { return eq(a, b) || ls(a, b); }
ll gcd(ll a,ll b) { return a==0?b:gcd(b%a,a); };
ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
ll kpow(ll a,ll b) {ll res=1;a%=mod; if(b<0) return 1; for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll read(){ll x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
//inv[1]=1;
//for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
int n;
struct P{int s,b,id;bool operator <(const P& c) const{if(s==c.s) return b>c.b;return s<c.s;}
}p[maxn];
int g[maxn],pre[maxn];
void init(){mt(g,0);mt(pre,-1);g[0] = -1;
}
void output(int x){if(pre[x]==-1){printf("%d",p[x].id);return;}output(pre[x]);printf(" %d",p[x].id);
}
int main(){init();scanf("%d",&n);rep(i,1,n+1) scanf("%d%d",&p[i].s,&p[i].b),p[i].id = i;sort(p+1,p+n+1);int ans = 0;rep(i,1,n+1){int l = 0,r = ans,pos = -1;while(l <= r){ //在前面找出找到第一个大于等于当前的b的点int mid = (l + r) >> 1;if(p[i].b > p[g[mid]].b) l = mid + 1;else pos = mid,r = mid - 1;}if(pos == -1) ans++,pos = ans;pre[i] = g[pos - 1];if(p[i].s <= p[g[pos]].s || g[pos] == 0) g[pos] = i;}printf("%d\n",ans);output(g[ans]);return 0;
}

View Code

因为s已经是递增的了,那么后面的s肯定是大于等于前面的了,那我们只要让每个s对应的b最小,这样后面的才更容易拼起来

AC代码:

#include<bits/stdc++.h>
#define de(x) cout<<#x<<"="<<x<<endl;
#define dd(x) cout<<#x<<"="<<x<<" ";
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define repd(i,a,b) for(int i=a;i>=(b);--i)
#define repp(i,a,b,t) for(int i=a;i<(b);i+=t)
#define ll long long
#define mt(a,b) memset(a,b,sizeof(a))
#define fi first
#define se second
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define pdd pair<double,double>
#define pdi pair<double,int>
#define mp(u,v) make_pair(u,v)
#define sz(a) (int)a.size()
#define ull unsigned long long
#define ll long long
#define pb push_back
#define PI acos(-1.0)
#define qc std::ios::sync_with_stdio(false)
#define db double
#define all(a) a.begin(),a.end()
const int mod = 1e9+7;
const int maxn = 1e5+5;
const double eps = 1e-6;
using namespace std;
bool eq(const db &a, const db &b) { return fabs(a - b) < eps; }
bool ls(const db &a, const db &b) { return a + eps < b; }
bool le(const db &a, const db &b) { return eq(a, b) || ls(a, b); }
ll gcd(ll a,ll b) { return a==0?b:gcd(b%a,a); };
ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
ll kpow(ll a,ll b) {ll res=1;a%=mod; if(b<0) return 1; for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll read(){ll x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
//inv[1]=1;
//for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
int n;
struct P{int s,b,id;bool operator <(const P& c) const{if(s==c.s) return b>c.b;return s<c.s;}
}p[maxn];
int g[maxn],pre[maxn];
void init(){mt(g,0);mt(pre,-1);g[0] = -1;
}
void output(int x){if(pre[x]==-1){printf("%d",p[x].id);return;}output(pre[x]);printf(" %d",p[x].id);
}
int main(){init();scanf("%d",&n);rep(i,1,n+1) scanf("%d%d",&p[i].s,&p[i].b),p[i].id = i;sort(p+1,p+n+1);int ans = 0;rep(i,1,n+1){int l = 0, r = ans, pos = -1;while(l <= r){ //在前面找出找到第一个大于等于当前的b的点int mid = (l + r) >> 1;if(p[i].b > p[g[mid]].b) l = mid + 1;else pos = mid,r = mid - 1;}if(pos==-1) ans++, pos = ans;pre[i] = g[pos - 1];if(p[i].b < p[g[pos]].b || g[pos] == 0) g[pos] = i;}printf("%d\n",ans);output(g[ans]);return 0;
}

View Code

转载于:https://www.cnblogs.com/chinacwj/p/9062813.html

今日SGU 5.20相关推荐

  1. 今日SGU 5.25

    SGU 194 题意:无源汇有上下界的最大流 收获:https://wenku.baidu.com/view/0f3b691c59eef8c75fbfb35c.html #include<bit ...

  2. 电影院今日复业!20部影片上映,票房预售超百万

    今天是全国电影院复工首日,据猫眼专业版显示,截至7月19日,全国83个城市391家影院复工首日(7月20日)的预售分账票房达94.8万,观影人次3.4万.如果计入每张3元的服务费,7月20日全国预售票 ...

  3. 5月20号端游吃鸡服务器维护,吃鸡12月20号更新 | 手游网游页游攻略大全

    发布时间:2016-07-08 csol2维护到几点?1月20号更新了什么内容?感兴趣的朋友来看看csol2新版本20日维护到几点 1月20号更新了什么内容吧,希望可以帮到大家. csol2新版本20 ...

  4. 日本語勉強:今日できることは明日に延ばすな

    http://jp.hjenglish.com/new/p120949/ 勉強をしていて一番大変なこと. それは.「少しずつでもいいので毎日続けること」です. 学习过程中最难的事是: "每天 ...

  5. Python程序员的“避坑”指南

    结合我最近这些年的Python学习.开发经验,发现90%的人在学Python时都会遇到下面这些问题: 1. 没什么经验根本不知道从何学起,而且应用方向太多了根本不知道该选择什么方向... 2. 基础入 ...

  6. 永远不要对 AI 说:“我不行!”

    最近这些年,如果我要问什么技术最值钱,我想超过90%的人都会说是:人工智能. 确实,随着近些年人工智能发展与普及,AI研发岗早已成为编程领域薪水最高的岗位之一. 但扎心的是,一提到 AI ,相信绝大部 ...

  7. 再见,Python!

    结合我最近这些年的 Python 学习.开发经验,发现近90%的程序员在学 Python 时都会遇到下面这3个问题: 1.想学Python,但不知从何学起,应用方向太多了也不知道该选择什么方向... ...

  8. “编程能力差的程序员,90%输在这事上!”谷歌AI专家:都是瞎努力!

    Google 人工智能开发者专家彭靖田老师说--超90%的程序员在初学Python 人工智能时,都会遇到下面3个问题: 1.想学人工智能,但不知从何学起,也不知道该选择什么方向... 2.Python ...

  9. “编程能力差,90%是输在这点上!”谷歌AI开发专家:逆袭并没那么难!

    Google 人工智能开发者专家彭靖田老师说--超90%的程序员在初学Python 人工智能时,都会遇到下面3个问题: 1.想入门人工智能,但不知从何学起,也不知道该选择什么方向... 2.Pytho ...

最新文章

  1. Sentry--错误日志收集框架
  2. 子对象是什么java_面向对象编程(什么是对象)——java
  3. django中路由匹配规则
  4. Windows软件调试学习笔记(1)
  5. 处理输入屏幕的互相锁定
  6. Python实例讲解 -- 接收邮件 (亲测)
  7. php属性赋值吗,php – 设置类中属性的默认值
  8. C#字符串来袭——因为爱,所以爱
  9. python 微信机器人教程_Python实现微信机器人的方法
  10. 索尼机器狗Aibo将在美国开售,智能撒娇是最甜的 |每只性格都不同
  11. 拓端tecdat|R语言基于Garch波动率预测的区制转移交易策略
  12. WinRAR压缩文件参数详解
  13. OpenCV-camShift 算法
  14. 华中邀请四届 WHU1567 Sloth's Angry
  15. 对于最小二乘法的解释
  16. Android生态系统进化论
  17. 神武3 服务器维护公告,2021年3月19日更新公告
  18. win10系统 oracle11g的安装流程
  19. 最短路计数(入门最短路)
  20. limits.conf 配置不生效问题排查

热门文章

  1. jQuery——入门(三)JQuery DOM操作(核心处理和文档处理)
  2. 用css3制作一个Music Player Menu
  3. ie6识别important问题
  4. WEB开发中合理选择图片格式
  5. 用css实现透明度的方法
  6. JavaScript算法(实例三)数组排序--冒泡排序 / sort() / reverse() / 比较函数
  7. 6位数密码C++破解程序,并附上时间
  8. 入门机器学习(六)--课后作业解析-logistics回归(python实现)
  9. Angular Service
  10. 7-6 顺序存储的二叉树的最近的公共祖先问题 (10 分)