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. 配置Supervisor开机启动

    配置Supervisor开机启动: 新建一个"supervisord.service"文件 # dservice for systemd (CentOS 7.0+) # by ET ...

  2. Js多国时间动态更新

    Js多国时间动态更新 点击下载

  3. ES6 .Set数据结构去除重复元素

    用法一 var set = new Set([1, 2, 3, 4, 2, 8, 4]); //两个2 for (var elem of set) { console.log(elem) // 输出结 ...

  4. ubuntu Apache 2命令

    Task: Start Apache 2 Server /启动apache服务# /etc/init.d/apache2 startor$ sudo /etc/init.d/apache2 start ...

  5. APMServ 支持.htaccess伪静态

    假如你的APMServ安装在X盘APMServ5.2.6目录的话请按以下步骤做. X:\APMServ5.2.6\Apache\conf\httpd.conf  文件找到你所在的虚拟目录修改以下这个地 ...

  6. c++游戏服务器编程学习笔记(一)TCP/IP

    1. c++游戏服务器编程c++运行效率非常高2. TCP传输控制协议IP网际协议Socket 3.Linux 乌班图开源第三方库BOOST 4.80%游戏服务器端用C++工作量最大的地方是具体的游戏 ...

  7. asp.net、 mvc session影响并发

    现象:在一个网站中,当访问一个处理比较耗时的页面(A页面),页面请求还没有返回时,此时再点击访问该网站的其他页面(B页面)会出现B页面很久都没有响应和返回,直到A页面输出返回数据时才开始处理B页面的请 ...

  8. ModernUI教程:定义一个Logo

    ModernWindow的标题栏包含了一块区域用来显示自定义的窗体Logo: 这个窗体logo通过ModernWindow.LogoData属性来设置.这个属性是几何类型数据支持Path.Data m ...

  9. ContentProvider详解

    作用:把一个App中的数据库通过Url的形式共享出来,供其他App使用. 首先在App1中创建一个数据库,用SQLiteOpenHelper public class MyOpenHelper ext ...

  10. JPA和hibernate的关系

    实际上,JPA的标准的定制是hibernate作者参与定制的,所以JPA是hibernate的一个总成,可以这么理解