2018 Multi-University Training Contest 1 部分简单题解析
Preface
ACM系列赛第一站,没有进前200还是很伤的。
主要是T2当时没写出来就GG了,后来看了下其实不是很难。
题目按照比赛时我们A的顺序讲,其实我都是被陈潇然大佬和ZWC带飞的。
T1 Maximum Multiple
题目大意:给出一个数字\(n\),求三个数\(x,y,z\)满足\(x,y,z|n\)且\(x+y+z=n\)。找出这样一组并使得\(xyz\)最大。有解就输出\(xyz\)的最大值,否则输出\(-1\)。
大力猜结论,然后用ZWC当时写的一个暴力拍了下\(n\le200\)的情况发现没问题,然后就交了并1A了。
所以ACM猜结论成为我们队的日常
以下为看起来很有道理的结论:
- 当\(3|n\)时,此时很显然,答案为\((\frac{3}{n})^3\)
- 当\(4|n\)时,经过一番简单的推导,得到答案为\((\frac{4}{n})^2\cdot \frac{n}{2}\)
- 其他情况一律无解
CODE
#include<cstdio>
#include<cctype>
using namespace std;
int n,t;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch; while (!isdigit(ch=tc()));
while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
}
inline void write(long long x)
{
if (x>9) write(x/10);
putchar(x%10+'0');
}
int main()
{
//freopen("1.in","r",stdin); freopen("1.out","w",stdout);
register int i,j; read(t);
while (t--)
{
read(n);
if (n%3==0) write(1LL*(n/3)*(n/3)*(n/3)),putchar('\n'); else
if (n%4==0) write(1LL*(n/4)*(n/4)*(n/2)),putchar('\n'); else puts("-1");
}
return 0;
}
T3 Triangle Partition
这题我写的,感觉比T1简单。
题目大意:在平面内有保证三点不共线的\(3n\)个点,让你给出一种构造方案组成\(n\)个三角形,使得每个三角形互不相交。
这个数学老师上课好像讲过,我们把三角形按\(x\)坐标排个序,然后每次三个三个取即可。这样显然不会相交。
CODE
#include<cstdio>
#include<cctype>
#include<algorithm>
using namespace std;
const int N=1005;
struct data
{
int x,y,id;
}a[N*3];
int t,n;
inline char tc(void)
{
static char fl[100000],*A=fl,*B=fl;
return A==B&&(B=(A=fl)+fread(fl,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(int &x)
{
x=0; char ch; int flag=1; while (!isdigit(ch=tc())) flag=ch^'-'?1:-1;
while (x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc())); x*=flag;
}
inline void write(int x)
{
if (x>9) write(x/10);
putchar(x%10+'0');
}
inline bool cmp(data a,data b)
{
return a.x<b.x;
}
int main()
{
//freopen("3.in","r",stdin); freopen("3.out","w",stdout);
register int i; read(t);
while (t--)
{
for (read(n),i=1;i<=3*n;++i)
read(a[i].x),read(a[i].y),a[i].id=i;
sort(a+1,a+3*n+1,cmp);
for (i=1;i<=3*n;i+=3)
write(a[i].id),putchar(' '),write(a[i+1].id),putchar(' '),write(a[i+2].id),putchar('\n');
}
return 0;
}
T11 Time Zone
还是我写的,所以WA了几发。不过以后这种大力模拟题都是陈潇然大佬写的了。
题目大意:给出当前的时间(UTC +8)以及目标时区。让你求目标时区的时间。
大力模拟,有一些细节要注意:
- 读入的时区可能是负数或小数
- 处理跨度一天的时间是格外要注意一些诡异的情况
CODE
#include<cstdio>
using namespace std;
int t,a,b,x,y; char ch;
int main()
{
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&a,&b); ch=getchar(); while (ch!='+'&&ch!='-') ch=getchar();
scanf("%d",&x); y=0; if (getchar()=='.') scanf("%d",&y);
if (ch=='+')
{
x-=8; b+=y*6; if (b>59) b-=60,++a; if (b<0) b+=60,--a; a+=x; if (a>23) a-=24; if (a<0) a+=24;
} else
{
x+=8; b-=y*6; if (b<0) b+=60,--a; if (b>59) b-=60,++a; a-=x; if (a<0) a+=24; if (a>23) a-=24;
}
if (a>9) printf("%d:",a); else printf("0%d:",a);
if (b>9) printf("%d\n",b); else printf("0%d\n",b);
}
return 0;
}
T4 Distinct Values
这题是ZWC写的,我已经在YY线段树上二分的时候他说他用set艹过了此题。
一脸震惊,不过如果你看到下一场我用分块爆艹线段树就知道ACM的数据是极水的
题目大意:给你一个长度为\(n\)的序列以及\(m\)个限制条件,让你求一个字典序最小的序列满足对于每一个限制\(,i,j\in [l_i,r_i],i\not =j\)的一对\(i,j\)都有\(a_i\not = a_j\)
首先把操作按左端点排个序,然后考虑既然是字典序最小,那么贪心的想每一次肯定是把小数字的先放了。
考虑直接用set来维护一下当前可以被选择的数,那么我们在一个区间退出时可以直接把它从set里删掉,同时在右边更新的时候把当前这个数插进去即可,取得时候也是贪心地取set里的最小值。
CODE(ZWC写的,我懒得再写一遍了)
#include<cstdio>
#include<algorithm>
#include<set>
#define maxn 100005
using namespace std;
set<int> s;
int T,n,m,ans[maxn];
struct chi{
int l,r;
bool operator <(const chi b)const{return l<b.l||(l==b.l&&r>b.r);}
}a[maxn];
int read(){
int ret=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') f=-f;ch=getchar();}
while(ch>='0'&&ch<='9') {ret=ret*10+ch-'0';ch=getchar();}
return ret*f;
}
int main(){
T=read();
while(T--){
s.clear();
n=read();m=read();
for(int i=1;i<=n;i++) s.insert(i),ans[i]=1;
for(int i=1;i<=m;i++) a[i].l=read(),a[i].r=read();
sort(a+1,a+1+m);
int lst=0;a[0].l=1;
for(int i=1;i<=m;i++){
if(a[i].r<=a[lst].r) continue;
for(int j=a[lst].l;j<a[i].l;j++) s.insert(ans[j]);
for(int j=max(a[lst].r+1,a[i].l);j<=a[i].r;j++) ans[j]=*s.begin(),s.erase(s.begin());
lst=i;
}
for(int i=1;i<=n;i++) printf("%d%c",ans[i],n==i?'\n':' ');
}
return 0;
}
T2 Balanced Sequence
这题之后做的,打的时候抽了没想出排序的cmp就GG了
题目大意:给出你\(n\)个括号序列,让你用合理的方法把这\(n\)个序列排好顺序后使得它们连在一起组成的序列中匹配的左右括号对数最多。
首先考虑先把每一个序列中已经含有的对数先算出来,这个很简单吧,拿栈或者直接开一个变量模拟一下就完了,这些对数可以直接累加到答案中。
考虑将已经计算完的括号对删去,那么剩下的一定是\(')'\cdot x+'('\cdot y\)这样的形式。
首先我们考虑全局的贪心,对于那些\(x_i>y_i\)的括号肯定得先放在后面,同样的\(x_i<=y_i\)的就应该尽量的往前放。
现在我们考虑局部的贪心如果两个序列\(i,j\)都是\(x_i>y_i\)的形式,那么为了避免浪费,我们肯定是把\(x_i\)小的放在前面。
同理,若两个序列\(i,j\)都是\(x_i<=y_i\)的形式,就要把\(y_i\)小的放在前面。
这样我们只要写好cmp然后在模拟一遍就好了。
CODE
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=100005;
struct data
{
int l,r;
}a[N]; char s[N]; int n,ans,len,res,t;
inline bool cmp(data a,data b)
{
if (a.l>a.r&&b.l<=b.r) return 1;
if (a.l<=a.r&&b.l>b.r) return 0;
if (a.l>a.r&&b.l>b.r) return a.r<b.r;
return a.l>b.l;
}
inline int min(int a,int b)
{
return a<b?a:b;
}
int main()
{
//freopen("CODE.in","r",stdin); freopen("CODE.out","w",stdout);
for (scanf("%d",&t);t;--t)
{
register int i,j; ans=res=0;
for (scanf("%d",&n),i=1;i<=n;++i)
{
scanf("%s",s+1); len=strlen(s+1); a[i].l=a[i].r=0;
for (j=1;j<=len;++j) if (s[j]=='(') ++a[i].l;
else if (a[i].l) ++ans,--a[i].l; else ++a[i].r;
}
for (sort(a+1,a+n+1,cmp),i=1;i<=n;++i)
{
int p=min(res,a[i].r); ans+=p;
res-=p; res+=a[i].l;
}
printf("%d\n",ans<<1);
}
return 0;
}
Postscript
这次题目总体偏简单,然而我们还是不会做
看来以后这种像T2这样的中等题要争取切掉。
2018 Multi-University Training Contest 1 部分简单题解析的更多相关文章
- 2018 Multi-University Training Contest 2 部分简单题解析
Preface 多校第二场,依靠罚时优势打到了校内的Rank 2 暴力分块碾标算系列 T4 Game 题目大意:在一个数集\([1,n]\)中两个人轮流选择其中的一个数,并从数集中删去这个数所有约数. ...
- 2018 Nowcoder Multi-University Training Contest 2
目录 Contest Info Solutions A. run D. monrey G. transform H. travel I. car J. farm Contest Info Practi ...
- 2018 Nowcoder Multi-University Training Contest 1
Practice Link J. Different Integers 题意: 给出\(n\)个数,每次询问\((l_i, r_i)\),表示\(a_1, \cdots, a_i, a_j, \cdo ...
- 2018 Nowcoder Multi-University Training Contest 5
Practice Link A. gpa 题意: 有\(n\)门课程,每门课程的学分为\(s_i\),绩点为\(c_i\),要求最多删除\(k\)门课程,使得gpa最高. gpa计算方式如下: \[ ...
- 2018 Nowcoder Multi-University Training Contest 10
Practice Link J. Rikka with Nickname 题意: 给出\(n\)个字符串,要求依次合并两个串\(s, t\),满足将\(t\)合并到\(s\)中变成\(r\),使得\( ...
- HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/500 ...
- 2018 Multi-University Training Contest 2
题目链接:2018 Multi-University Training Contest 2 6318 Swaps and Inversions 题意:sum=x*逆序个数+交换次数*y,使sum最小 ...
- 2018 Multi-University Training Contest 1
比赛链接:2018 Multi-University Training Contest 1 6301 Distinct Values 题意:输出一个长度为n的序列,要求满足m个区间的数都不相同,并且字 ...
- hdu 6301 Distinct Values (2018 Multi-University Training Contest 1 1004)
Distinct Values Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
随机推荐
- Android Studio_更新Gradle
一.Gradle更新问题 Android Studio每次更新版本都会更新Gradle这个插件,而且有时候提示更新,却一直更新不了,那是因为中国伟大的长城问题.就是下图,我刚刚更新了,提示更新grad ...
- 使用windows命令和iconv.exe批量转换文件编码
iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法:iconv.exe -f gbk -t utf-8 gbk.txt ...
- 洗礼灵魂,修炼python(26)--编程核心之“递归”
递归 1.什么是递归: 其实前面都提过,但没有详细讲.多次调用自身就叫递归 看图,这种就叫递归 看过盗梦空间没?其实也是递归 2.递归需要满足条件: 有调用函数自身 有一个正确的返回条件来结束 在使用 ...
- HTML语言和CSS开发
第一张 HTML基础1.HTML:超文本标记语言(它除了文字,还能写图片.视频.音频.交互),他不是编程语言,它是标记语言2. <!DOCTYPE html> HTML5版本申明 < ...
- 读取HTML文件进行格式化解析
#读取HTML文件进行格式化解析 $html = New-Object -ComObject "HTMLFile"; $source = Get-Content -Path &qu ...
- Nginx状态信息(status)配置及信息详解
nginx状态信息功能的介: Nginx 在编译安装 Nginx 的时候添加 --with-http_stub_status_module 参数,其功能是记录 Nginx 的基本访问状态信息,让使用者 ...
- Go语言学习笔记(一)Let's 干吧
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 简介 Go是Google开发的一种 静态强类型.编译型,并发型,并具有垃圾回收功能的编程语言.为了方便搜索 ...
- Centos7.5调试/etc/sysctl.conf文件导致宕机
今天安装greenplus数据库,需要调试一个核心文件/etc/sysctl.conf文件,结果导致系统异常宕机,出现的问题就是使用任何命令都不能输出正确的结果,只有这个显示: 不知道是什么原因,ls ...
- 4.4Python数据类型(4)之字符串函数
返回总目录 目录: 1.字符串的查找计算 2.字符串的转换 3.字符串的填充压缩 4.字符串的分割拼接 5.字符串的判定 (一)字符串的查找计算 (1)len(str)计算字符串的总数 (2)find ...
- Java设计模式之二 ----- 工厂模式
在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模式,又 ...