2015年江西理工大学C语言程序设计竞赛(高级组)
A
解法:DP+二分
dp[i]=max(dp[i],dp[j]+p[i].v)(i>j)
dp[i]表示建立i点之后能够获得的最大值
int n,M; struct node
{
int l,v;
}p[];
int dp[]; bool cmp(node a,node b){
return a.l < b.l;
} bool judge_oo(){
int Max = -;
for(int i = ;i <= n;i++) Max = max(Max,p[i].v);
if(Max >= M) return ;
return ;
} bool judge_no(){
int sum = ;
for(int i = ;i <= n;i++) sum += p[i].v;
if(sum >= M) return ;
return ;
} bool judge_DP(int L){
memset(dp,,sizeof dp);
for(int i = ;i <= n;i++){
for(int j = ;j < i; j++){
if(p[i].l - p[j].l >= L){
dp[i] = max(dp[i],dp[j] + p[i].v);
}
}
}
int ML = ;
for(int i = ;i <= n;i++) ML = max(ML,dp[i]);
if(ML >= M) return ;
return ;
} int solve(int L,int R){
while(L + < R){
int mid = (L + R)/;
if(judge_DP(mid)) L = mid;
else R = mid;
}
return L;
} int main(int argc, char *argv[])
{
//freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
int T;
cin >> T;
while(T--){
cin >> n >> M;
for(int i = ;i <= n;i ++)
cin >> p[i].l >> p[i].v;
if(judge_no()){
puts("-1");
continue;
}
if(judge_oo()){
puts("oo");
continue;
}
sort(p+,p+n+,cmp);
p[].l = - , p[].v = ;
int L = , R = p[n].l;
cout << solve(L,R) << endl;
}
return ;
}
B
解法:模拟。字符串模拟
#include<stdio.h>
//#include<bits/stdc++.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<sstream>
#include<set>
#include<queue>
#include<map>
#include<vector>
#include<algorithm>
#include<limits.h>
#define inf 0x3fffffff
#define INF 0x3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define ULL unsigned long long
using namespace std;
int i,j;
int n,m;
int num_1,num_2;
int t;
int sum,ans,flag;
string s_1,s_2,s_3;
string sss;
string ss[10000];
string c;
map<string,int>q1;
map<string,int>q2;
int main()
{
cin>>t;
while(t--)
{
cin>>n>>c;
num_1=0;
for(i=0; i<n; i++)
{
cin>>sss;
ans=sss.find(".");
s_1=sss.substr(0,ans);
s_2=sss.substr(ans+1,sss.length());
if(s_2==c)
{
int ans_2=sss.find("(");
int ans_3=sss.find(")");
if((ans_2!=-1&&ans_2<ans_3))
{
// num_1++;
ss[num_1++]=sss.substr(0,ans_2);
// cout<<sss.substr(0,ans_2)<<endl;
}
else if(ans_2==-1||ans_3==-1)
{
// num_1++;
ss[num_1++]=sss.substr(0,ans);
// cout<<sss.substr(0,ans)<<endl;
}
}
}
for(i=0; i<num_1; i++)
{
// cout<<ss[i]<<"A"<<endl;
}
// cout<<num_1<<endl;
for(i=0; i<num_1; i++)
{
q1[ss[i]]++;
}
for(i=0; i<num_1; i++)
{
if(q2[ss[i]]==0)
{
q2[ss[i]]=1;
if(q1[ss[i]]==1)
{
cout<<ss[i]<<"."<<c<<endl;
}
else
{
cout<<ss[i]<<"."<<c<<" "<<q1[ss[i]]<<endl;
}
}
}
q1.clear();
q2.clear();
}
return 0;
}
C
解法:树状数组寻找逆序对+预处理
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath> using namespace std; const int M = ; long long ans[M + ];
int G[M + ],c[M + ]; int Lowbit(int x)
{
return x & (-x);
} void Insert(int x,int d)
{
while(x<=M){
c[x]+=d;
x+=Lowbit(x);
}
} int Sum(int x)
{
int sum=;
while(x>){
sum+=c[x];
x-=Lowbit(x);
}
return sum;
} void init()
{
memset(G,-,sizeof G);
memset(ans,,sizeof ans);
memset(c,,sizeof c);
G[] = ;
for(int i = ; i <= ;i++){
if(G[i] == -){
for(int j = i;j <= ;j += i){
if(G[j] == -){
G[j] = i;
}
}
}
}
for(int i=;i<=;i++)
{
Insert(G[i],);
ans[i] = ans[i-] + (i-Sum(G[i]));
}
} int main()
{
init();
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
cout<<ans[n]<<endl;
}
return ;
}
D
解法:模版题,最小覆盖圆
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
const double eps=1e-;
struct Point{
double x,y;
}p[];
double dis(const Point &a,const Point &b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
Point circumcenter(const Point &a,const Point &b,const Point &c)
{ //返回三角形的外心
Point ret;
double a1=b.x-a.x,b1=b.y-a.y,c1=(a1*a1+b1*b1)/;
double a2=c.x-a.x,b2=c.y-a.y,c2=(a2*a2+b2*b2)/;
double d=a1*b2-a2*b1;
ret.x=a.x+(c1*b2-c2*b1)/d;
ret.y=a.y+(a1*c2-a2*c1)/d;
return ret;
}
void min_cover_circle(Point *p,int n,Point &c,double &r){ //c为圆心,r为半径
random_shuffle(p,p+n); //
c=p[]; r=;
for(int i=;i<n;i++)
{
if(dis(p[i],c)>r+eps) //第一个点
{
c=p[i]; r=;
for(int j=;j<i;j++)
if(dis(p[j],c)>r+eps) //第二个点
{
c.x=(p[i].x+p[j].x)/;
c.y=(p[i].y+p[j].y)/;
r=dis(p[j],c);
for(int k=;k<j;k++)
if(dis(p[k],c)>r+eps) //第三个点
{//求外接圆圆心,三点必不共线
c=circumcenter(p[i],p[j],p[k]);
r=dis(p[i],c);
}
}
}
}
}
int main(){
int n;
Point c;
double r;
int t;
cin>>t;
while(t--)
{
cin>>n;
for(int i=; i<n; i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
min_cover_circle(p,n,c,r);
printf("%.1f %.1f\n",c.x,c.y);
} return ;
}
2015年江西理工大学C语言程序设计竞赛(高级组)的更多相关文章
- 2014江西理工大学C语言程序设计竞赛高级组题解
1001 Beautiful Palindrome Number 枚举回文数字前半部分,然后判断该数字是否满足,复杂度为O(sqrt(n))! 1002 Recovery Sequence 本题的核 ...
- 2017年江西理工大学C语言程序设计竞赛(高级组)
问题 A: 求近似值 #include <stdio.h> #include <time.h> #include <stdlib.h> using namespac ...
- 2018年江西理工大学C语言程序设计竞赛(高级组) 三角平方数
题目描述 三角数:形如图a,圆点摆放成等边三角形的数字,则为三角数. (图a) 平方数:形如图b,小方块摆放成正方形的数字,则为平方数. (图b) 那么如果一个数字既是三角形数又是平方数,则称为三角平 ...
- 2018年江西理工大学C语言程序设计竞赛高级组部分题解
B Interesting paths 考察范围:组合数学 此题是机器人走方格的变种,n*m的网格,从(1,1)走到(n,m),首先可以明确,水平要走m-1格,竖直要走n-1格,则走到目的地的任意一条 ...
- 2018年江西理工大学C语言程序设计竞赛(初级组)一
C语言竞赛初级组第一.二场答案:https://www.cnblogs.com/xingkongyihao/p/10046918.html A: 逆序对 时间限制: 1 s 内存限制: ...
- 2015年江西理工大学C语言程序设计竞赛(初级组)
JankTao相亲记 解法:排序 #include<stdio.h> #include<string.h> #include<iostream> #include& ...
- 2017年江西理工大学C语言程序设计竞赛(初级组)
问题 A: Petr的盒子(初) #include <iostream> #include <stdio.h> #include <algorithm> using ...
- 2014江西理工大学C语言程序竞赛高级组
Beautiful Palindrome Number 题意:求N里面有多少个符合要求的数字(数字要求:回文数,且前一半部分是不严格递增) 解法:打表 #include<bits/stdc++. ...
- 2016年江西理工大学C语言程序设计竞赛(高级组)
问题 A: jxust 解法:争议的问题(是输入整行还是输入字符串),这里倾向输入字符串,然后判断是否含有jxust就行 #include<bits/stdc++.h> using nam ...
随机推荐
- Oracle手工建库
环境准备 手工建库的前提是ORACLE软件已经正确安装到操作系统中,只是需要我们利用ORACLE软件提供的一些工具和脚本来创建一个数据库,创建这个数据库可以运行DBCA工具图形化创建,也可以使用CRE ...
- bzoj1150: [CTSC2007]数据备份Backup--贪心+优先队列维护堆
题目大意:将k对点两两相连,求最小长度 易证得,最优方案中,相连的办公楼一定是取相邻的比取不相邻的要更优 然后就可以用贪心来做这道题了.. 之前向CZL大神学习了用堆来贪心的做法orz 大概思路就是将 ...
- 下载包含src,tgz,zip的文件
下载哪一个文件? 含src的是源码文件,含tgz和zip的分别是linux和windows系统下jar包(java文件包) asc,md5,sha1是三种加密文件,可用于判断文件是否被修改. Ente ...
- IOS第二天多线程-01-延时执行
**********延时执行 #import "HMViewController.h" @interface HMViewController () @end @implement ...
- php session_start() 非常慢 问题原因查找
最近在做东西的时候发现一个问题 有一个接口挂了 ,然后进行测试访问地址的时候,浏览器就一直处于等待响应的状态 怎么访问都不行,只有重启web服务器才行. 如果不重启web服务器进行代码调试,总发现在s ...
- 在winform中添加普通右键菜单
显示水平滚动条:点击GridControl的Run Designer在弹出的对话框中选择Views,将右侧属性窗口中OptionsView下的ColumnAutoWidth设置成false: 可以选择 ...
- phpcms 导航栏点击栏目颜色定位方法和phpcms list页实现分页
另:一个栏目下面如果没有子栏目,那么它调用的模板就是列表页模板(及list_为前缀的模板):如果一个栏目下面有子栏目,那么它调用的就是栏目首页模板(category_为前缀的模板). 当你这个栏目添加 ...
- ArrayBlockingQueue,BlockingQueue分析
BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有一个容量,让容量满时往BlockingQueue中添加数据时会造成阻塞,当容量为空时取元素操作会 ...
- Python之路-python数据类型(列表、字典、字符串、元祖)操作
一.列表: 列表的语法,以中括号开通和结尾,元素以逗号隔开.例如:name = [] 列表是以下标取值,第一个元素下标是0,第二个元素下标是1,最后一个元素下标是-1. 1.增加 #name = ...
- confluence5.6安装
转自:http://ju.outofmemory.cn/entry/157013 说明:此文在confluence-wiki-5.6.5版本亲测通过附件:http://pan.baidu.com/s/ ...