Codeforces_714
A.相遇时间段l = max(l1,l2),r = min(r1,r2),再判断k是否在里面。
#include <iostream>
using namespace std; long long l1,l2,r1,r2,k; int main()
{
cin >> l1 >> r1 >> l2 >> r2 >> k;
long long l = max(l1,l2),r = min(r1,r2);
if(l > r) cout << << endl;
else
{
long long t = r-l+;
if(l <= k && k <= r) t--;
cout << t << endl;
}
return ;
}
B.判断出现的数的个数,1或2个直接YES,3个以上直接NO,3个判断是否等差。
#include<bits/stdc++.h>
using namespace std; int n,a[];
map<int,int> mp; int main()
{
ios::sync_with_stdio(false);
cin >> n;
int cnt = ;
for(int i = ;i <= n;i++)
{
int x;
cin >> x;
if(!mp.count(x))
{
cnt++;
mp[x] = ;
a[cnt] = x;
}
}
if(cnt == || cnt == ) cout << "YES" << endl;
else if(cnt >= ) cout << "NO" << endl;
else
{
sort(a+,a+);
if(a[]+a[] == *a[]) cout << "YES" << endl;
else cout << "NO" << endl;
}
return ;
}
C.把每一个数都转换成18位的pattern串,放进map处理。
#include<bits/stdc++.h>
using namespace std; int n;
map<string,int> mp; int main()
{
ios::sync_with_stdio(false);
cin >> n;
while(n--)
{
string s1,s2,s = "";
cin >> s1 >> s2;
for(int i = s2.length()-;i >= ;i--)
{
if((s2[i]-'')%) s = ""+s;
else s = ""+s;
}
while(s.length() < ) s = ""+s;
if(s1 == "+") mp[s]++;
else if(s1 == "-") mp[s]--;
else cout << mp[s] << endl;
}
return ;
}
D.先把图分成左右或上下两块,然后二分每一块中矩形的四条边。
#include<bits/stdc++.h>
using namespace std; int n;
struct xx
{
long long x1,x2,y1,y2;
void print()
{
cout << x1 << " " << y1 << " " << x2 << " " << y2 << " ";
}
}; int query(int x1,int y1,int x2,int y2)
{
if(x1 > x2)swap(x1,x2);
if(y1 > y2)swap(y1,y2);
cout<<"? "<<x1<<" "<<y1<<" "<<x2<<" "<<y2<<endl;
int ans;
cin>>ans;
return ans;
} xx f(int x1,int y1,int x2,int y2)
{
xx ans;
long long l = x1,r = x2;
while(l < r)
{
int mid = (l+r)/;
if(query(x1,y1,mid,y2) < ) l = mid+;
else r = mid;
}
ans.x2 = l;
l = x1,r = x2;
while(l < r)
{
int mid = (l+r+)/;
if(query(mid,y1,x2,y2) < ) r = mid-;
else l = mid;
}
ans.x1 = l;
l = y1,r = y2;
while(l < r)
{
int mid = (l+r)/;
if(query(x1,y1,x2,mid) < ) l = mid+;
else r = mid;
}
ans.y2 = l;
l = y1,r = y2;
while(l < r)
{
int mid = (l+r+)/;
if(query(x1,mid,x2,y2) < ) r = mid-;
else l = mid;
}
ans.y1 = l;
return ans;
}
int main()
{
cin >> n;
long long x1,y1,x2,y2,x3,y3,x4,y4;
long long l = ,r = n;
while(l < r)
{
long long mid = (l+r)/;
if(query(,,mid,n) < ) l = mid+;
else r = mid;
}
long long t = l;
if(query(,,t,n) == && query(t+,,n,n) == )
{
xx a = f(,,t,n),b = f(t+,,n,n);
cout << "! ";
a.print();
b.print();
cout << endl;
return ;
}
l = ,r = n;
while(l < r)
{
long long mid = (l+r)/;
if(query(,,n,mid) < ) l = mid+;
else r = mid;
}
t = l;
xx a = f(,,n,t),b = f(,t+,n,n);
cout << "! ";
a.print();
b.print();
cout << endl;
return ;
}
E.如果是非严格单调递增该如何做,我们会发现每次调整,都是调整某个数字为原先数列中存在的数字,最后才是最优的,所以,我们设DP[i][j]表示前i个数字,最后一个数为原先数列排序后第j大的数字的最小代价,然后令a[i]=a[i]-i,把严格单调递增就转化为非严格单调递增。
#include<bits/stdc++.h>
using namespace std; int n;
long long a[],b[],dp[][]; int main()
{
cin >> n;
for(int i = ;i <= n;i++)
{
cin >> a[i];
a[i] -= i;
b[i] = a[i];
}
sort(b+,b++n);
for(int i = ;i <= n;i++)
{
long long minn = dp[i-][];
for(int j = ;j <= n;j++)
{
minn = min(minn,dp[i-][j]);
dp[i][j] = abs(a[i]-b[j])+minn;
}
}
long long ans = dp[n][];
for(int i = ;i <= n;i++) ans = min(ans,dp[n][i]);
cout << ans << endl;
return ;
}
还有优先队列优化的。
#include<bits/stdc++.h>
using namespace std; int n;
priority_queue<long long> q; int main()
{
cin >> n;
long long ans = ;
for(int i = ;i <= n;i++)
{
long long x;
cin >> x;
x -= i;
q.push(x);
if(q.top() > x)
{
ans += q.top()-x;
q.pop();
q.push(x);
}
}
cout << ans << endl;
return ;
}
Codeforces_714的更多相关文章
随机推荐
- Time、Date拼接成TimeStamp
Time.Date拼接成TimeStamp 有关于Time类型.Date类型的数据这里不再赘述,本文旨在讲解如何将数据库中的Time.Date类型取出来并转换成TimeStamp类型,话不多说,先看代 ...
- spring boot中使用freemarker
在做Java web开发领域,web模板引擎主要有jsp.freemarker.velocity,其中freemarker是我们常用的一种,在spring boot中使用的freemarker的方法可 ...
- Ubuntu生成应用图标
1.DeskTop Entry介绍 现代 Linux 桌面系统也提供了此项功能.目前,Linux KDE 和 Linux GNOME 桌面系统都使用 Desktop Entry 文件标准来描述程序启动 ...
- FlashFXP中文破解 指南
flashfxp是一款使用非常广泛,功能非常更强大的FXP/FTP软件.它拥有显示彩色文字.比较CuteFTP的目录.上传和下载文件.共享文件等众多功能,其中深受用户喜爱的便是目录比较功能,它能够有效 ...
- Redis入门--1.安装Redis
redis是什么? 是完全开源免费的,用c语言编写的,是一个单线程,高性能的(key/value)内存数据库,基于内存运行并支持持久化的nosql数据库 redis能干嘛? 主要是用来做缓存,但不仅仅 ...
- 【Java基础总结】字符串
1. java内存区域(堆区.栈区.常量池) 2. String length() //长度 //获取子串位置 indexOf(subStr) lastIndexOf(subStr) //获取子串 c ...
- Java项目之家庭收支记账软件
模拟实现基于文本界面的家庭记账软件,该软件能够记录家庭的收入支出,并能够打印收支明细表. 项目采用分级菜单方式.主菜单如下: 假设家庭起始的生活基本金为10000元. 每次登记收入(菜单2)后,收入的 ...
- html5中的Web Storage
html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage.sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有 ...
- 类选择器练习:Google 案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- python函数和lambda表达式学习笔记
1. python函数 不同于其他语言,python支持函数返回多个值 为函数提供说明文档:help(函数名)或者函数名.__doc__ def str_max(str1, str2): ''' 比较 ...