[日常训练]常州集训day2
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的更多相关文章
- [日常训练]常州集训day8
T1 Description 给定一个长度为$n$的正整数序列$a$.可以将序列分成若干段,定义第$i$段的权值$x_i$为这一段中所有数的最大值,特殊地,$x_0=0$.求$\sum_{i=1}^{ ...
- [日常训练]常州集训day7
T1 Description 给定一个序列,初始为空.依次将$1-n$插入序列,其中$i$插到当前第$a_i$个数的右边($a_i=0$表示插到序列最左边).求最终序列. Input 第一行一个整数$ ...
- [日常训练]常州集训day5
T1 Description 小$W$和小$M$一起玩拼图游戏啦~ 小$M$给小$M$一张$N$个点的图,有$M$条可选无向边,每条边有一个甜蜜值,小$W$要选$K$条边,使得任意两点间最多有一条路径 ...
- [日常训练]常州集训day3
T1 Description 有$K$个石子,石子只能放在$N$条水平线与$M$条竖直线构成的网格的交点上. 求用$K$个石子最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子. ...
- 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)
题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...
- WC集训DAY2笔记 组合计数 part.1
目录 WC集训DAY2笔记 组合计数 part.1 基础知识 组合恒等式 错排数 卡特兰数 斯特林数 伯努利数 贝尔数 调和级数 后记 补完了几天前写的东西 WC集训DAY2笔记 组合计数 part. ...
- 2019暑期金华集训 Day2 线性代数
自闭集训 Day2 线性代数 高斯消元 做实数时,需要找绝对值最大的作为主元,以获取更高精度. 在欧几里得环(简单例子是模合数)意义下也是对的.比如模合数意义下可以使用辗转相除法消元. 欧几里得环:对 ...
- 暑假集训Day2 互不侵犯(状压dp)
这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...
- [日常] NOIP前集训日记
写点流水账放松身心... 10.8 前一天考完NHEEE的一调考试终于可以开始集训了Orz (然后上来考试就迟到5min, GG) T1维护队列瞎贪心, 过了大样例交上去一点也不稳...T出翔只拿了5 ...
随机推荐
- Anyconnect的VPN环境部署(1)-OpenConnect server(ocserv)服务安装
打算在公司IDC机房部署一套VPN环境,经过考虑,最终决定采用Cisco下的开源技术AnyConnect.AnyConnect的优势有:1)长连接,待机不会断开:2)速度快,稳定性好:3)安全性好,全 ...
- XML Data Type Methods(一)
XML Data Type Methods(一) /*XML Data Type Methods: 1.The query('XQuery') method retrieves(vt.检索,重新得到) ...
- java:如何用代码控制H2 Database启动
1.纯手动start/stop package com.cnblogs.yjmyzz.h2; import java.sql.Connection; import java.sql.DriverMan ...
- opencv6.1-imgproc图像处理模块之平滑与形态学操作
这个部分是<opencv-tutorials.pdf>的部分,这部分也是几大部分中例子最多的,其实这个教程的例子都很不错,不过有些看得出来还是c接口的例子,说明例子有些年头了,其实在&qu ...
- C/C++实践笔记 003
数据结构与算法程序=数据结构+算法语言是一种工具语言工具(c,c++)--程序设计方法(面向过程.面向对象)——数据结构(二叉树.队列.栈.红黑树.链表……)——算法(快速排序算法.冒泡排序算法.选择 ...
- .html 、.htm 、 .shtml 以及 .shtm 四种扩展名的文件区别
新增了一个分类,叫做 Personals,中文我把它解释成 "个人恶趣味",这里将记载一些对工作无关紧要,但是个人又一时有兴趣了解的东西. 今天要讲的是如题的 4 种扩展文件的区别 ...
- 求最长回文子串 - leetcode 5. Longest Palindromic Substring
写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...
- C# 7.0 新特性1: 基于Tuple的“多”返回值方法
本文基于Roslyn项目中的Issue:#347 展开讨论. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: ...
- 如何把自己打造成技术圈的 papi 酱
最近半年,一个叫papi酱的平胸女子连续在微博.朋友圈.创业圈刷屏,当之无愧成了中文互联网的第一大网红.呃,你以为我会巴拉巴拉说一堆网工创业的事?NO,今天想借papi酱的话题跟大家一起聊聊程序员如何 ...
- DNS资源纪录(Resource Record)介绍
http://dns-learning.twnic.net.tw/bind/intro6.html 类型 SOA NS A AAAA PTR CNAME MX -------------- ...