http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=391

A     Thanks, TuSimple!


Time Limit: 1 Second      Memory Limit: 65536 KB

题意:有t组数据,n个男生,m个女生,每个人身高不同,每个人都期望和比自己高或者比自己低的人跳舞,问最多有多少对舞伴

题解:把期待比自己高的男生身高和期待比自己低的男生身高分别存在两个数组a[n],b[n]里,同理对女生也进行这样的操作c[n],d[n],分别对这四个数组进行排序,对于期望比自己的高的男生来说应该找到期望比自己低的女生,这时就可以从a[1]开始找对应的满足条件的d[i](也就是比自己高的女生),同理可以从c[1]开始找对应的满足条件的b[i],(由于排序之后的单调性,所以二者的期望单调性也完全吻合所以正确性也很显然)统计个数即可

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
typedef long long ll;
ll a[],b[],q[],w[],e[],r[];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%lld",&a[i]);
}
for(int i=;i<=m;i++){
scanf("%lld",&b[i]);
}
int tot1,tot2,tot3,tot4;
tot1=tot2=tot3=tot4=;
for(int i=;i<=n;i++){
int c;
scanf("%d",&c);
if(c){
q[++tot1]=a[i];
}
else{
w[++tot2]=a[i];
}
}
for(int i=;i<=m;i++){
int c;
scanf("%d",&c);
if(c){
e[++tot3]=b[i];
}
else{
r[++tot4]=b[i];
}
}
sort(q+,q++tot1);
sort(w+,w++tot2);
sort(e+,e++tot3);
sort(r+,r++tot4);
int pos1=;
int ans=;
for(int i=;i<=tot1;i++){
while(pos1<=tot4&&r[pos1]<q[i])pos1++;
if(pos1<=tot4){
ans++;
pos1++;
}
else{
break;
}
}
pos1=;
for(int i=;i<=tot3;i++){
while(pos1<=tot2&&w[pos1]<e[i])pos1++;
if(pos1<=tot2){
ans++;
pos1++;
}
else{
break;
}
}
printf("%d\n",ans);
}
return ;
}

B       Even Number Theory


Time Limit: 1 Second      Memory Limit: 65536 KB

题意:给了一堆定义,就是求  e/2+e/4+e/8+e/16.....+0 的值

题解:大数除法+大数加法(模板要用对..板子不对超时一万年..当然也可以使用java,但是我不会)

 #include<bits/stdc++.h>
#define ll long long
using namespace std;
#define MAXN 9999
#define MAXSIZE 1010
#define DLEN 4
class BigNum{
private:
int a[]; //可以控制大数的位数
int len;
public:
BigNum(){len=;memset(a,,sizeof(a));} //构造函数
BigNum(const int); //将一个 int 类型的变量转化成大数
BigNum(const char*); //将一个字符串类型的变量转化为大数
BigNum(const BigNum &); //拷贝构造函数
BigNum &operator=(const BigNum &); //重载赋值运算符,大数之间进行赋值运算
friend istream& operator>>(istream&,BigNum&); //重载输入运算符
friend ostream& operator<<(ostream&,BigNum&); //重载输出运算符
BigNum operator+(const BigNum &)const; //重载加法运算符,两个大数之间的相加运算
BigNum operator-(const BigNum &)const; //重载减法运算符,两个大数之间的相减运算
BigNum operator*(const BigNum &)const; //重载乘法运算符,两个大数之间的相乘运算
BigNum operator/(const int &)const; //重载除法运算符,大数对一个整数进行相除运算
BigNum operator^(const int &)const; //大数的 n 次方运算
int operator%(const int &)const; //大数对一个类型的变量进行取模运算int
bool operator>(const BigNum &T)const; //大数和另一个大数的大小比较
bool operator>(const int &t)const; //大数和一个 int 类型的变量的大小比较
void print(); //输出大数
};
BigNum::BigNum(const int b){
int c, d = b; len=;
memset(a,,sizeof(a));
while(d>MAXN){
c=d-(d/(MAXN+))*(MAXN+);
d=d/(MAXN+);
a[len++]=c;
}
a[len++]=d;
}
BigNum::BigNum(const BigNum &T):len(T.len){
int i;
memset(a,,sizeof(a));
for(i=;i<len;i++)
a[i]=T.a[i];
} BigNum & BigNum::operator=(const BigNum &n){
int i;
len=n.len;
memset(a,,sizeof(a));
for(i=;i<len;i++)
a[i]=n.a[i];
return *this;
}
istream& operator>>(istream &in,BigNum &b){
char ch[MAXSIZE*];
int i=-;
in>>ch;
int L=strlen(ch);
int count=,sum=;
for(i=L-;i>=;){
sum=;
int t=;
for(int j=;j<&&i>=;j++,i--,t*=){
sum+=(ch[i]-'')*t;
}
b.a[count]=sum;
count++;
}
b.len=count++;
return in;
}
ostream& operator<<(ostream& out,BigNum& b){
int i;
cout<<b.a[b.len-];
for(i=b.len-;i>=;i--){
printf("%04d",b.a[i]);
}
return out;
}
BigNum BigNum::operator/(const int &b)const{
BigNum ret;
int i,down=;
for(i=len-;i>=;i--){
ret.a[i]=(a[i]+down*(MAXN+))/b;
down=a[i]+down*(MAXN+)-ret.a[i]*b;
}
ret.len=len;
while(ret.a[ret.len-]== && ret.len>)
ret.len--;
return ret;
}
BigNum BigNum::operator+(const BigNum &T)const{
BigNum t(*this);
int i,big;
big=T.len>len?T.len:len;
for(i=;i<big;i++){
t.a[i]+=T.a[i];
if(t.a[i]>MAXN){
t.a[i+]++;
t.a[i]-=MAXN+;
}
}
if(t.a[big]!=)
t.len=big+;
else t.len=big;
return t;
} bool BigNum::operator>(const BigNum &T)const{
int ln;
if(len>T.len)return true;
else if(len==T.len){
ln=len-;
while(a[ln]==T.a[ln]&&ln>=)
ln--;
if(ln>= && a[ln]>T.a[ln])
return true;
else return false;
}
else return false;
}
bool BigNum::operator>(const int &t)const{
BigNum b(t);
return *this>b;
}
int main(){
int t;
cin>>t;
while(t--){
BigNum a;
cin>>a;
BigNum ans;
ans=;
while(a>){
a=a/;
ans=ans+a;
}
cout<<ans<<endl;
}
return ;
}

C   Robot Cleaner I


Time Limit: 1 Second      Memory Limit: 65536 K


题意:给出n*m的格子地图,0表示空地,1表示墙壁,2表示有垃圾的空地,然后给出一段包含L,R,U,D,P(清理垃圾),I的操作序列(长度恒为243),然后定义一个t(i,j)=mp[i]*3^4+mp[i-1]*3^3+mp[i+1][j]*3^2+mp[i][j-1]*3+mp[i][j+1],其中i,j表示所在位置的坐标,每次执行那段操作序列的第t(i,j)+1个字符表示的操作(不能移动到墙的位置,每个垃圾只能被清理一次),一共执行k次操作(k<=10^18),问最终能清理多少垃圾

题解:如果这道题没有清理垃圾之后mp[i][j]从2变为0的步骤,那么直接记录每个位置是否被访问到,如果被访问就退出即可,因为走过一次的路再走还是那一条路,但是这里的mp[i][j]会随着清扫工作而改变,所以需要记录每个位置被走过的次数,如果>n*m就退出,由于n*m<=2e4,所以大概4e8的复杂度..可以通过

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<stack>
using namespace std;
typedef long long ll;
int vis[][];
char ch[];
char q[][];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,m;
scanf("%d%d",&n,&m);
ll a,b,k;
scanf("%lld%lld%lld",&a,&b,&k);
scanf("%s",ch+);
for(int i=;i<=n;i++){
scanf("%s",q[i]+);
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
for(int s=;s<;s++){
vis[(i-)*m+j][s]=;
}
}
}
vis[(a-)*m+b][q[a][b]-'']=;
int ans=;
while(k){
k--;
int sum=****(q[a][b]-'');
sum++;
if(a>){
sum+=(q[a-][b]-'')***;
}
if(a<n){
sum+=(q[a+][b]-'')**;
}
if(b>){
sum+=(q[a][b-]-'')*;
}
if(b<m){
sum+=(q[a][b+]-'');
}
if(sum>)break;
if(ch[sum]=='L'){
b--;
if((q[a][b]-'')==)b++;
}
if(ch[sum]=='R'){
b++;
if((q[a][b]-'')==)b--;
}
if(ch[sum]=='U'){
a--;
if((q[a][b]-'')==)a++;
}
if(ch[sum]=='D'){
a++;
if((q[a][b]-'')==)a--;
}
if(ch[sum]=='P'){
if((q[a][b]-'')==){
q[a][b]='';
ans++;
}
}
if(vis[(a-)*m+b][(q[a][b]-'')]>n*m)break;
vis[(a-)*m+b][(q[a][b]-'')]++;
}
printf("%d\n",ans);
}
return ;
}

E     Potion


Time Limit: 1 Second      Memory Limit: 65536 KB

题意:给两个数组a[n],b[n],如果b[n]可以高位向低位移动物品,问能否通过若干次操作使对于 1<=i<=n 都可以a[i]<=b[i]

题解:由于可以从高位向低位移动,所以只需要倒着做,如果b[i]>a[i],就把多出的部分移动到b[i-1],如果b[i]<a[i]就证明不能通过若干次操作完成题目要求

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
typedef long long ll;
ll a[],b[];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
int f=;
for(int i=;i<=n;i++)scanf("%lld",&a[i]);
for(int i=;i<=n;i++)scanf("%lld",&b[i]);
for(int i=n;i>=;i--){
if(b[i]>=a[i]){
b[i-]+=b[i]-a[i];
}
else{
f=;
break;
}
}
if(f)printf("Yes\n");
else printf("No\n");
}
return ;
}

G     Postman


Time Limit: 1 Second      Memory Limit: 65536 KB

题意:给一个序列,表示n个邮箱,邮局在0处,小明每次可以最多携带k封信,最终结束地点可以不在邮局,问小明走的最短的距离

题解:贪心地想把尽量远的封信放在一起送,最后由于可以不在邮局结束,所以结果要减去最远的那次距离

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
typedef long long ll;
ll a[];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,k;
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++){
scanf("%lld",&a[i]);
}
sort(a+,a++n);
int pos=upper_bound(a+,a++n,)-a;
ll sum=;
int i;
ll maxx=;
for(i=n;i>=pos;i-=k){
sum+=*a[i];
}
maxx=max(abs(a[n]),abs(a[]));
pos=min(pos,n);
while(pos>=&&a[pos]>=)pos--;
for(i=;i<=pos;i+=k){
sum+=*abs(a[i]);
}
printf("%lld\n",sum-maxx);
}
return ;
}

J      Extended Twin Composite Number


Time Limit: 1 Second      Memory Limit: 65536 KB      Special Judge

题意:给出一个n,求 满足x+n=y并且x,y是非质数的一组解

题解:x=8*n  y=9*n,x y 就一定不是质数且满足等式

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
typedef long long ll;
ll a[],b[];
int main(){
int t;
scanf("%d",&t);
while(t--){
ll n;
scanf("%lld",&n);
printf("%lld %lld\n",n*,n*);
}
return ;
}

The 19th Zhejiang University Programming Contest Sponsored by TuSimple (Mirror)的更多相关文章

  1. The 19th Zhejiang University Programming Contest Sponsored by TuSimple (Mirror) B"Even Number Theory"(找规律???)

    传送门 题意: 给出了三个新定义: E-prime : ∀ num ∈ E,不存在两个偶数a,b,使得 num=a*b;(简言之,num的一对因子不能全为偶数) E-prime factorizati ...

  2. zoj 4020 The 18th Zhejiang University Programming Contest Sponsored by TuSimple - G Traffic Light(广搜)

    题目链接:The 18th Zhejiang University Programming Contest Sponsored by TuSimple - G Traffic Light 题解: 题意 ...

  3. Mergeable Stack 直接list内置函数。(152 - The 18th Zhejiang University Programming Contest Sponsored by TuSimple)

    题意:模拟栈,正常pop,push,多一个merge A B 形象地说就是就是将栈B堆到栈A上. 题解:直接用list 的pop_back,push_back,splice 模拟, 坑:用splice ...

  4. 152 - - G Traffic Light 搜索(The 18th Zhejiang University Programming Contest Sponsored by TuSimple )

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5738 题意 给你一个map 每个格子里有一个红绿灯,用0,1表示 ...

  5. The 18th Zhejiang University Programming Contest Sponsored by TuSimple -C Mergeable Stack

    题目链接 题意: 题意简单,就是一个简单的数据结构,对栈的模拟操作,可用链表实现,也可以用C++的模板类来实现,但是要注意不能用cin cout,卡时间!!! 代码: #include <std ...

  6. The 18th Zhejiang University Programming Contest Sponsored by TuSimple

    Pretty Matrix Time Limit: 1 Second      Memory Limit: 65536 KB DreamGrid's birthday is coming. As hi ...

  7. ZOJ 4016 Mergeable Stack(from The 18th Zhejiang University Programming Contest Sponsored by TuSimple)

    模拟题,用链表来进行模拟 # include <stdio.h> # include <stdlib.h> typedef struct node { int num; str ...

  8. ZOJ 4019 Schrödinger's Knapsack (from The 18th Zhejiang University Programming Contest Sponsored by TuSimple)

    题意: 第一类物品的价值为k1,第二类物品价值为k2,背包的体积是 c ,第一类物品有n 个,每个体积为S11,S12,S13,S14.....S1n ; 第二类物品有 m 个,每个体积为 S21,S ...

  9. The 17th Zhejiang University Programming Contest Sponsored by TuSimple J

    Knuth-Morris-Pratt Algorithm Time Limit: 1 Second      Memory Limit: 65536 KB In computer science, t ...

随机推荐

  1. sed命令总结-Linux

    sed命令总结-Linux linuxsed 2018年02月08日 19时27分57秒 命令语法经常忘记,每次总是看笔记不切实际,记不起来的要多查manual,本次总结按照manual总结,希望下次 ...

  2. node-express-1

    安装: express v4.0以后的安装: npm install express-generator -g 建立项目 express -t ejs blog 安装依赖 cd blog && ...

  3. 【webpack学习笔记】a08-缓存

    一般要优化网站的加载速度可以从缓存入手,利用缓存可以降低网络流量,减少访问请求,从而可以达到加快访问速度的目的. 但是,如果一旦将文件缓存,那么有更新的时候就不能及时更新,若要看到最新内容,那么就需要 ...

  4. swiper使用中一些点的总结

    最近做了PC端改版,要求移动端有更好的体验,一些产品滚屏的展示,就用了swiper插件,以方便用户在移动端访问可以滑动翻屏展示. 本次项目中使用的是swiper2.0版本. 首先要引入swiper的j ...

  5. 《推荐》安装Photoshop详细步骤 ,手把手,一步一步,具体详细地教你安装Photoshop (Adobe photoshop CS6)

    现在的大学生必备技能,除了单反拍照,就是PS (Photoshop)了.可以说PS是一个强大的图片编辑处理软件,也是目前公认的最好的通用平面美术设计软件,它的功能完善,性能稳定,使用也很方便.几乎在所 ...

  6. EFCore Owned Entity Types,彩蛋乎?鸡肋乎?之彩蛋篇

    EFCore Owned Entity Types的定义 EFCore Owned Entity Types的文档在这里:https://docs.microsoft.com/zh-cn/ef/cor ...

  7. JDBC-day1

    package cn.gzsxt.test; import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.D ...

  8. 设计模式二之观察者模式(Subject-Observer)

    观察者模式定义了一系列对象之间的一对多关系,当一个主题对象改变状态,其他所有的依赖者都会收到通知. 好了,你可能会觉得上面的描述略微复杂,较难理解,那么现在我们将用一个简单的例子去讲解这个模式. 我们 ...

  9. Web应用增加struts2支持

    编辑Web应用的web.xml配置文件,配置Struts2的核心Filter.下面是增加了Struts2的核心 Filter配置的web.xml配置文件的代码片段. <!-- 定义struts2 ...

  10. iphone html5页面禁止点击数字就打电话

    在html页面的head代码之间增加下面代码: <meta name="format-detection" content="telephone=no" ...