T1

Description

给定$N$个点,问这$N$个点能构成的三角形个数。

Input

第一行一个整数$N$,代表点数。
接下来$N$行,每行两个非负整数$X,Y$,表示一个点的坐标。

Output

一个非负整数,即构成三角形个数。

Sample Input

5

0 0

1 0

2 0

0 1

1 1

Sample Output

9

HINT

$N\;\leq\;100$,保证任意两点不重合,坐标$\;\leq\;10000$.

Solution

只要三点不共线就能组成三角形了。是否共线用斜率或叉积判即可。

#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 105
#define eps 1e-11
using namespace std;
struct point{
int x,y;
}a[N];
int n,ans;double d1,d2,d3;
inline double sqr(int k){
return (double)(k*k);
}
inline point dec(point x,point y){
return (point){x.x-y.x,x.y-y.y};
}
inline int mult(point x,point y){
return x.x*y.y-x.y*y.x;
}
inline double dis(point x,point y){
point z=dec(x,y);
return sqrt(sqr(z.x)+sqr(z.y));
}
inline bool cmp(double x,double y){
return x>y&&fabs(x-y)>eps;
}
inline void init(){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
for(int i=;i<n;i++)
for(int j=i+;j<n;j++)
for(int k=j+;k<=n;k++)
if(mult(dec(a[i],a[j]),dec(a[j],a[k]))) ++ans;
printf("%d\n",ans);
}
int main(){
freopen("tri.in","r",stdin);
freopen("tri.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return ;
}

T2

Description

为了测试小$M$的英语水平,$Mr.R$让小$M$写英语作文,小$M$则把作文交给了小$W$写。
然而$Mr.R$总结出了那个小$W$写作文的习惯,也就是某些关键的字符串。如果一篇作文中这若干个关键字符串都出现,他就认为这是小$W$写的。注意,小$W$可能写多篇作文。

Input

第一行一个整数$N$,表示关键字符串的个数,$N\;\leq\;100$。

接下来$N$行,每行为一个长度不超过$100$的字符串。

最后是若干段文本,每段文本以$\$$结尾。

由于写作文的人太疯狂,每篇作文最长可以达到$1350000$个字符,但作文的个数不超过$10$。

Output

对于每一段文本对应一行输出。

$’Yes’$表示是小W的作文,$’No’$表示不是。

请注意大小写。

Sample Input

3

i

love

m

ilovem

Sample Output

Yes

No

HINT

$N\;\leq\;100$

Solution

这题用字符串哈希和$KMP$可以拿到$90$分,$AC$自动机能$A$(因为它是$AC$自动机的裸题)。

为何这题不简述题面?因为小W帮小M写的作文是“ilovem”(被耽美毒害的我)

#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 105
#define T 10005
#define M 1350005
using namespace std;
struct trie{
int chl[],nxt;
}t[T];
int a[M],b[N],l,m,n,cnt;
char c[M];
bool v[T];queue<int> q;
inline int read(){
int ret=;char c=getchar();
while(!isdigit(c))
c=getchar();
while(isdigit(c)){
ret=ret*+c-'';
c=getchar();
}
return ret;
}
inline void insert(int a[],int l){
for(int i=,u=;i<=l;i++){
if(!t[u].chl[a[i]])
t[u].chl[a[i]]=++cnt;
u=t[u].chl[a[i]];
}
}
inline void get_nxt(){
for(int i=;i<;i++)
if(t[].chl[i])
q.push(t[].chl[i]);
while(!q.empty()){
int u=q.front();q.pop();
for(int i=,j,c;i<;i++){
if(c=t[u].chl[i]){
q.push(c);j=t[u].nxt;
while(j&&!t[j].chl[i])
j=t[j].nxt;
t[c].nxt=t[j].chl[i];
}
}
}
}
inline bool chk(){
memset(v,,sizeof(v));
for(int i=,j=;i<=m;i++){
while(j&&!t[j].chl[a[i]])
j=t[j].nxt;
if(t[j].chl[a[i]])
j=t[j].chl[a[i]];
v[j]=true;
for(int k=t[j].nxt;k&&!v[k];k=t[k].nxt)
v[k]=true;
}
for(int i=;i<=cnt;i++)
if(!v[i]) return false;
return true;
}
inline void init(){
scanf("%d",&n);
while(n--){
scanf("%s",c+);
l=strlen(c+);
for(int i=;i<=l;i++)
b[i]=c[i]-'a';
insert(b,l);
}
get_nxt();
while(scanf("%s",c+)!=EOF){
m=strlen(c+)-;
for(int i=;i<=m;i++)
a[i]=c[i]-'a';
if(chk()) printf("Yes\n");
else printf("No\n");
}
}
int main(){
freopen("letter.in","r",stdin);
freopen("letter.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return ;
}

T3

Description

在二维坐标系中有$N$面镜子(镜子坐标绝对值不超过$M$),镜子均与坐标轴成$45$°角,所以一共有两种类型“/”和“\”。原点不会有镜子,任意一点最多只有一面镜子。
镜子两个面都能反光,而中间不透光,例如,对于一个“/”型镜子,下方向射入的光线会被反射到右方向,左方向射入的光线会被反射到上方向。

现在有一条光线从原点沿$x$轴正方向射出,求走过T路程后所在位置。

Input

第一行三个整数$N,M,T$。

第$2$到$N+1$行,每行两个整数$X_i,Y_i$,表示镜子坐标,一个字符$S_i$表示镜子类型。

Output

一行两个整数,表示走过T路程后的坐标。

Sample Input

5 2 8

0 1 \

0 2 /

1 0 /

1 1 \

1 2 \

Sample Output

3 1

HINT

$N\;\leq\;10^5,M\;\leq\;10^9,T\;\leq\;10^{18}$

Solution

每面镜子对于一个方向反射出光线,会到达的镜子(如果有的话)是固定的。

所以可以预处理出每面镜子向$4$个方向反射出光线会到达的镜子是哪个($sort$后乱搞即可)。

然后直接模拟+判环就可以过了。

时间复杂度$O(nlogn+n)$。

#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 100005
using namespace std;
typedef long long ll;
struct point{
ll x,y;int n,ty;
}a[N];
int nxt[][N],dir[][],n,m,u;
ll t,v[][N];
inline int read(){
int ret=,f=;
char c=getchar();
while(!isdigit(c)){
if(c=='-') f=-;
c=getchar();
}
while(isdigit(c)){
ret=ret*+c-'';
c=getchar();
}
return ret*f;
}
inline ll read_ll(){
ll ret=,f=;
char c=getchar();
while(!isdigit(c)){
if(c=='-') f=-;
c=getchar();
}
while(isdigit(c)){
ret=ret*+c-'';
c=getchar();
}
return ret*f;
}
inline char read_c(){
char c=getchar();
while(c!='\\'&&c!='/')
c=getchar();
return c;
}
inline bool cmpx(point x,point y){
if(x.x!=y.x) return x.x<y.x;
return x.y<y.y;
}
inline bool cmpy(point x,point y){
if(x.y!=y.y) return x.y<y.y;
return x.x<y.x;
}
inline bool cmpi(point x,point y){
return x.n<y.n;
}
inline ll dis(point x,point y){
if(x.x==y.x) return abs(x.y-y.y);
return abs(x.x-y.x);
}
inline void init(){
n=read();m=read();t=read_ll();
for(int i=;i<=n;i++){
a[i].n=i;
a[i].x=read_ll();
a[i].y=read_ll();
if(read_c()=='/')
a[i].ty=;
}
sort(a+,a++n,cmpx);
for(int i=,j;i<=n;i=j){
for(j=i+;j<=n&&a[j].x==a[i].x;j++);
for(int k=i+;k<j;k++)
nxt[][a[k].n]=a[k-].n;
for(int k=j-;k>=i;k--)
nxt[][a[k].n]=a[k+].n;
}
sort(a+,a++n,cmpy);
for(int i=,j;i<=n;i=j){
if(!a[i].y) for(int k=i;k<=n&&!a[k].y;k++)
if(a[k].x>){
u=a[k].n;break;
}
for(j=i+;j<=n&&a[j].y==a[i].y;j++);
for(int k=i+;k<j;k++)
nxt[][a[k].n]=a[k-].n;
for(int k=j-;k>=i;k--)
nxt[][a[k].n]=a[k+].n;
}
sort(a+,a++n,cmpi);
dir[][]=;dir[][]=;
dir[][]=;dir[][]=;
dir[][]=;dir[][]=;
dir[][]=;dir[][]=;
if(!u||t<=a[u].x){
printf("%lld 0\n",t);
return;
}
t-=a[u].x;int cnt=;
for(int d=dir[a[u].ty][],k;t;){
++cnt;if(cnt>*) return;
k=nxt[d][u];
if(v[d][u]) t=t%(v[d][u]-t);
if(!k||t<=dis(a[k],a[u])){
if(d==) printf("%lld %lld\n",a[u].x,a[u].y+t);
else if(d==)
printf("%lld %lld\n",a[u].x-t,a[u].y);
else if(d==)
printf("%lld %lld\n",a[u].x,a[u].y-t);
else printf("%lld %lld\n",a[u].x+t,a[u].y);
return;
}
v[d][u]=t;t-=dis(a[k],a[u]);
d=dir[a[k].ty][d];u=k;
}
}
int main(){
freopen("mir.in","r",stdin);
freopen("mir.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return ;
}

[日常训练]常州集训day2的更多相关文章

  1. [日常训练]常州集训day8

    T1 Description 给定一个长度为$n$的正整数序列$a$.可以将序列分成若干段,定义第$i$段的权值$x_i$为这一段中所有数的最大值,特殊地,$x_0=0$.求$\sum_{i=1}^{ ...

  2. [日常训练]常州集训day7

    T1 Description 给定一个序列,初始为空.依次将$1-n$插入序列,其中$i$插到当前第$a_i$个数的右边($a_i=0$表示插到序列最左边).求最终序列. Input 第一行一个整数$ ...

  3. [日常训练]常州集训day5

    T1 Description 小$W$和小$M$一起玩拼图游戏啦~ 小$M$给小$M$一张$N$个点的图,有$M$条可选无向边,每条边有一个甜蜜值,小$W$要选$K$条边,使得任意两点间最多有一条路径 ...

  4. [日常训练]常州集训day3

    T1 Description 有$K$个石子,石子只能放在$N$条水平线与$M$条竖直线构成的网格的交点上. 求用$K$个石子最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子. ...

  5. 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)

    题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...

  6. WC集训DAY2笔记 组合计数 part.1

    目录 WC集训DAY2笔记 组合计数 part.1 基础知识 组合恒等式 错排数 卡特兰数 斯特林数 伯努利数 贝尔数 调和级数 后记 补完了几天前写的东西 WC集训DAY2笔记 组合计数 part. ...

  7. 2019暑期金华集训 Day2 线性代数

    自闭集训 Day2 线性代数 高斯消元 做实数时,需要找绝对值最大的作为主元,以获取更高精度. 在欧几里得环(简单例子是模合数)意义下也是对的.比如模合数意义下可以使用辗转相除法消元. 欧几里得环:对 ...

  8. 暑假集训Day2 互不侵犯(状压dp)

    这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...

  9. [日常] NOIP前集训日记

    写点流水账放松身心... 10.8 前一天考完NHEEE的一调考试终于可以开始集训了Orz (然后上来考试就迟到5min, GG) T1维护队列瞎贪心, 过了大样例交上去一点也不稳...T出翔只拿了5 ...

随机推荐

  1. Anyconnect的VPN环境部署(2)-在Linux客户机上连接Anyconnect

    由于之前已经在机房IDC安装了Anyconnect的VPN服务环境(参考:Anyconnect的VPN环境部署(1)-OpenConnect server(ocserv)服务安装)今天介绍下在linu ...

  2. xhprof使用笔记(非原创)

    [作用] xhprof是facebook开源的一个php性能分析工具. [安装] xhprof扩展的安装: wget   http://pecl.php.net/get/xhprof-0.9.2.tg ...

  3. 01传智_jbpm与OA项目_整体项目架构

    oA项目: 项目结构如下:

  4. noi题库(noi.openjudge.cn) 1.5编程基础之循环控制T36——T45

    T36 计算多项式的值 描述 假定多项式的形式为xn+xn-1+-+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值. 输入 输入仅一行,包括x和n,用单个空格隔开.x在flo ...

  5. 精通jQuery选择器

    虽然jQuery上手简单,相比于其他库学习起来较为简单,但是要全面掌握,却不轻松.因为它涉及到网页开发的方方面面,提供的方法和内部变化有上千种之多.初学者常常感到,入门很方便,提高很困难.本文的目标是 ...

  6. React Native 中组件的生命周期

    概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命 ...

  7. Qt学习笔记 QMessageBox

    Qt的几种MessageBox 1.Infomation类型 QMessageBox::information(this,tr("hello"),tr("title&qu ...

  8. 面向对象的PHP

    类的实例(包括继承) <?php // 父类 class Animal { public $name; public $age; // 构造函数,使用new操作符生成实例的时候自动调用 func ...

  9. ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)

    笔者小学文化,语言组织能力差,写的不通的地方请大家将就着看,不喜勿喷. 上篇我讲了如何在上传文件中入侵服务器,這次我们稍微多讲一点. 还是先讲下流程: 1.上传代码页面  我上传的是ashx页面. 2 ...

  10. gravity、layout_gravity及orientation

    gravity.layout_gravity及orientation 最近在弄一个简单的界面:横向,添加一张准备好的背景图,在界面右边居中放置一个按钮.实现过程中发现对布局的主要属性没有想象中地那么熟 ...