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环境部署(1)-OpenConnect server(ocserv)服务安装

    打算在公司IDC机房部署一套VPN环境,经过考虑,最终决定采用Cisco下的开源技术AnyConnect.AnyConnect的优势有:1)长连接,待机不会断开:2)速度快,稳定性好:3)安全性好,全 ...

  2. XML Data Type Methods(一)

    XML Data Type Methods(一) /*XML Data Type Methods: 1.The query('XQuery') method retrieves(vt.检索,重新得到) ...

  3. java:如何用代码控制H2 Database启动

    1.纯手动start/stop package com.cnblogs.yjmyzz.h2; import java.sql.Connection; import java.sql.DriverMan ...

  4. opencv6.1-imgproc图像处理模块之平滑与形态学操作

    这个部分是<opencv-tutorials.pdf>的部分,这部分也是几大部分中例子最多的,其实这个教程的例子都很不错,不过有些看得出来还是c接口的例子,说明例子有些年头了,其实在&qu ...

  5. C/C++实践笔记 003

    数据结构与算法程序=数据结构+算法语言是一种工具语言工具(c,c++)--程序设计方法(面向过程.面向对象)——数据结构(二叉树.队列.栈.红黑树.链表……)——算法(快速排序算法.冒泡排序算法.选择 ...

  6. .html 、.htm 、 .shtml 以及 .shtm 四种扩展名的文件区别

    新增了一个分类,叫做 Personals,中文我把它解释成 "个人恶趣味",这里将记载一些对工作无关紧要,但是个人又一时有兴趣了解的东西. 今天要讲的是如题的 4 种扩展文件的区别 ...

  7. 求最长回文子串 - leetcode 5. Longest Palindromic Substring

    写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...

  8. C# 7.0 新特性1: 基于Tuple的“多”返回值方法

    本文基于Roslyn项目中的Issue:#347 展开讨论. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: ...

  9. 如何把自己打造成技术圈的 papi 酱

    最近半年,一个叫papi酱的平胸女子连续在微博.朋友圈.创业圈刷屏,当之无愧成了中文互联网的第一大网红.呃,你以为我会巴拉巴拉说一堆网工创业的事?NO,今天想借papi酱的话题跟大家一起聊聊程序员如何 ...

  10. DNS资源纪录(Resource Record)介绍

          http://dns-learning.twnic.net.tw/bind/intro6.html 类型 SOA NS A AAAA PTR CNAME MX -------------- ...