今日SGU 5.20
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相关推荐
- 今日SGU 5.25
SGU 194 题意:无源汇有上下界的最大流 收获:https://wenku.baidu.com/view/0f3b691c59eef8c75fbfb35c.html #include<bit ...
- 电影院今日复业!20部影片上映,票房预售超百万
今天是全国电影院复工首日,据猫眼专业版显示,截至7月19日,全国83个城市391家影院复工首日(7月20日)的预售分账票房达94.8万,观影人次3.4万.如果计入每张3元的服务费,7月20日全国预售票 ...
- 5月20号端游吃鸡服务器维护,吃鸡12月20号更新 | 手游网游页游攻略大全
发布时间:2016-07-08 csol2维护到几点?1月20号更新了什么内容?感兴趣的朋友来看看csol2新版本20日维护到几点 1月20号更新了什么内容吧,希望可以帮到大家. csol2新版本20 ...
- 日本語勉強:今日できることは明日に延ばすな
http://jp.hjenglish.com/new/p120949/ 勉強をしていて一番大変なこと. それは.「少しずつでもいいので毎日続けること」です. 学习过程中最难的事是: "每天 ...
- Python程序员的“避坑”指南
结合我最近这些年的Python学习.开发经验,发现90%的人在学Python时都会遇到下面这些问题: 1. 没什么经验根本不知道从何学起,而且应用方向太多了根本不知道该选择什么方向... 2. 基础入 ...
- 永远不要对 AI 说:“我不行!”
最近这些年,如果我要问什么技术最值钱,我想超过90%的人都会说是:人工智能. 确实,随着近些年人工智能发展与普及,AI研发岗早已成为编程领域薪水最高的岗位之一. 但扎心的是,一提到 AI ,相信绝大部 ...
- 再见,Python!
结合我最近这些年的 Python 学习.开发经验,发现近90%的程序员在学 Python 时都会遇到下面这3个问题: 1.想学Python,但不知从何学起,应用方向太多了也不知道该选择什么方向... ...
- “编程能力差的程序员,90%输在这事上!”谷歌AI专家:都是瞎努力!
Google 人工智能开发者专家彭靖田老师说--超90%的程序员在初学Python 人工智能时,都会遇到下面3个问题: 1.想学人工智能,但不知从何学起,也不知道该选择什么方向... 2.Python ...
- “编程能力差,90%是输在这点上!”谷歌AI开发专家:逆袭并没那么难!
Google 人工智能开发者专家彭靖田老师说--超90%的程序员在初学Python 人工智能时,都会遇到下面3个问题: 1.想入门人工智能,但不知从何学起,也不知道该选择什么方向... 2.Pytho ...
最新文章
- Sentry--错误日志收集框架
- 子对象是什么java_面向对象编程(什么是对象)——java
- django中路由匹配规则
- Windows软件调试学习笔记(1)
- 处理输入屏幕的互相锁定
- Python实例讲解 -- 接收邮件 (亲测)
- php属性赋值吗,php – 设置类中属性的默认值
- C#字符串来袭——因为爱,所以爱
- python 微信机器人教程_Python实现微信机器人的方法
- 索尼机器狗Aibo将在美国开售,智能撒娇是最甜的 |每只性格都不同
- 拓端tecdat|R语言基于Garch波动率预测的区制转移交易策略
- WinRAR压缩文件参数详解
- OpenCV-camShift 算法
- 华中邀请四届 WHU1567 Sloth's Angry
- 对于最小二乘法的解释
- Android生态系统进化论
- 神武3 服务器维护公告,2021年3月19日更新公告
- win10系统 oracle11g的安装流程
- 最短路计数(入门最短路)
- limits.conf 配置不生效问题排查
热门文章
- jQuery——入门(三)JQuery DOM操作(核心处理和文档处理)
- 用css3制作一个Music Player Menu
- ie6识别important问题
- WEB开发中合理选择图片格式
- 用css实现透明度的方法
- JavaScript算法(实例三)数组排序--冒泡排序 / sort() / reverse() / 比较函数
- 6位数密码C++破解程序,并附上时间
- 入门机器学习(六)--课后作业解析-logistics回归(python实现)
- Angular Service
- 7-6 顺序存储的二叉树的最近的公共祖先问题 (10 分)