zoukankan      html  css  js  c++  java
  • 常州day2

    Task1

    为了测试小 W 的数学水平,果果给了小 W N 个点,问他这 N 个点能构成的三角形个数。

    对于 100%的数据:N<=100,保证任意两点不重合,坐标<=10000 

    恶心题(卡精度)

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<iostream>
     4 #include<math.h>
     5 #define il inline
     6 #define re register
     7 using namespace std;
     8 struct P{int x,y;} a[101];
     9 int n,cnt=0;
    10 il P operator - (P a,P b){
    11     return (P){a.x-b.x,a.y-b.y};
    12 }
    13 il int operator * (P a,P b){
    14     return a.x*b.y-a.y*b.x;
    15 }
    16 int main(){
    17     freopen("tri.in","r",stdin);
    18     freopen("tri.out","w",stdout);
    19     cin>>n;
    20     for(int i=1;i<=n;i++)
    21         cin>>a[i].x>>a[i].y;
    22     for(int i=1;i<=n;i++)
    23         for(int j=i+1;j<=n;j++)
    24             for(int k=j+1;k<=n;k++){
    25                 if((a[i]-a[j])*(a[i]-a[k])!=0){
    26                     cnt++;
    27                 }
    28             }
    29     cout<<cnt;
    30     return 0;
    31 }

    Task2 

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

    第一行一个整数 N,表示关键字符串的个数,N<=100。 接下来 N 行,每行为一个长度不超过 100 的字符串。 最后是若干段文本,每段文本以 $ 结尾。 由于写作文的人太疯狂,每篇作文最长可以达到 1350000 个字符,但作文的个数不超 过 10。  

    对于 100%的数据:N<=100 

    简单AC自动机

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<iostream>
     4 #include<math.h>
     5 #include<string>
     6 #include<string.h>
     7 #include<queue>
     8 #define il inline
     9 #define re register
    10 using namespace std;
    11 int n,a[100001][31],len[101],cnt=0,end[100001],fail[100001],vis[100001],m;
    12 char s[101][101],b[2000001];
    13 queue<int> q;
    14 il void match(){
    15     for(int i=1;i<=cnt;i++) fail[i]=1;
    16     q.push(1);
    17     while(!q.empty()){
    18         int h=q.front();q.pop();
    19         for(int i=0,j;i<26;i++) if(a[h][i]>0){
    20             j=fail[h];
    21             while(j>1&&a[j][i]==0) j=fail[j];
    22             if(a[j][i]>0&&a[j][i]!=a[h][i]){
    23                 fail[a[h][i]]=a[j][i];
    24             }
    25             else fail[a[h][i]]=1;
    26             q.push(a[h][i]);
    27         }
    28     }
    29 }
    30 il void getans(){
    31     int j=1;
    32     for(int i=1;i<m;i++){
    33         while(j>1&&a[j][b[i]-'a']==0) j=fail[j];
    34         if(a[j][b[i]-'a']>0){
    35             j=a[j][b[i]-'a'];vis[j]=1;
    36         }
    37     }
    38 }
    39 int main(){
    40     freopen("letter.in","r",stdin);
    41     freopen("letter.out","w",stdout);
    42     scanf("%d",&n);cnt=1;
    43     for(int i=1,k;i<=n;i++){
    44         scanf("%s",&s[i]);len[i]=strlen(s[i]);k=1;
    45         for(int j=0;j<len[i];j++){
    46             if(a[k][s[i][j]-'a']) k=a[k][s[i][j]-'a'];
    47             else{
    48                 a[k][s[i][j]-'a']=(++cnt);k=cnt;
    49             }
    50         }
    51         end[k]=1;
    52     }
    53     match();
    54     while(scanf("%s",b+1)!=EOF){
    55         memset(vis,false,sizeof(vis));
    56         m=strlen(b+1);getans();
    57         bool flag=true;
    58         for(int i=1;i<=cnt;i++)
    59             if(end[i]==1&&vis[i]==0){
    60                 flag=false;
    61             }
    62         if(flag) cout<<"Yes
    ";
    63         else cout<<"No
    ";
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    VS中的 MD/MT设置 【转】
    VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
    VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)[转]
    [MFC]选择目录对话框和选择文件对话框 [转]
    NMM3DViewer 设计
    将可执行程序的内存空间扩展到3GB(windows)
    centos7 安装rocketmq(quick start)
    Centos7 安装 Maven 3.5.*
    ss命令
    强制重启Linux系统的几种方法
  • 原文地址:https://www.cnblogs.com/ExiledPoet/p/5774626.html
Copyright © 2011-2022 走看看