Codeforces Round #208 (Div. 2)
A. Dima and Continuous Line描述:给一个n [1, 10^3], 然后是n个点横坐标xi [-10^6, 10^6],每相邻的两个点是一个半圆直径的两个点。判断这些圆会不会相交。相交输出yes,否则输出no。
思路:数据规模很小,直接暴力15ms水过。
[cpp]
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct Circus {
int left, right;
bool operator< (const Circus &next) const
{
return (left < next.left) || (left == next.left && right < next.right);
}
};
bool IsInsect(const Circus &a, const Circus &b)
{
return (a.left < b.left) && (b.left < a.right) && (a.right < b.right);
}
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int a[n];
for (int i = 0; i < n; ++i)
scanf("%d", &a[i]);
if (n == 1)
{
cout << "no" << endl;
continue;
}
Circus cir[n];
for (int i = 0; i < n - 1; ++i)
{
cir[i].left = min(a[i], a[i+1]);
cir[i].right = max(a[i], a[i+1]);
}
sort(cir, cir + n);
bool flag = 0;
for (int i = 0; i < n; ++i)
for (int j = i + 1; j < n; ++j)
if (IsInsect(cir[i], cir[j]))
{
flag = 1;
break;
}
if (flag)
cout << "yes\n";
else
cout << "no\n";
}
return 0;
}
B. Dima and Text Messages
描述:第一行是一个n [1, 10^5], 然后是n个字符串,首先按照规则在每个相邻字符串之间加上<3,(首位也要加上),得到<3word1<3word2<3 ... wordn<3。然后在得到的字符串上任意位置添加任意个小写字母或数字或大于小于号。现在输入一个字符串text,判断此字符串是否是按照规则构成的。是则输出yes,or no。
思路:先按照规则生成<3word1<3word2<3 ... wordn<3这个字符串。然后进行离散的匹配。只要它的每个字符都在text中出现就yes。
[cpp]
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
inline bool IsLegal(char c)
{
return ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '<' || c == '>');
}
int main()
{
int n;
scanf("%d", &n);
string s("<3"), t, text;
while (n--)
{
cin >> t;
s += t;
s += "<3";
}
cin >> text;
int lens = s.size(), lentxt = text.size();
if (lentxt < lens) //text长度小于s时一定不行
{
printf("no\n");
return 0;
}
for (int i = 0; i < lentxt; ++i) //判断每个字符是否合法
if (!IsLegal(text[i]))
{
printf("no\n");
return 0;
}
int i = 0, j = 0; //i,j分别作为s和text下标
while (true)
{
if (j >= lentxt)
break;
while (text[j] != s[i] && j < lentxt) //直到找到s[i]==text[j],一个匹配
++j;
++i, ++j; //找到一个匹配后就同时递增找下一个
}
//最后i小于s的长度时,说明没有匹配完全s中的每一个,输出no
if (i >= lens) //有可能出现前面都匹配,这时候i大于lens,一开始用==wa了一次
printf("yes\n");
else
printf("no\n");
return 0;
}
C. Dima and Containers
描述:操作三个数据结构使得每次取出的结果最大。具体请看题目。
思路:我把最大的三个记录,剩下的就直接放到deck的队尾。这一题自己思路不是很好,虽然过了,但是代码写的很烂。
[cpp]
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
#include <string>
using namespace std;
struct T {  
补充:软件开发 , C++ ,
- 更多C/C++疑问解答:
- 关于c++的cout输出的问题。
- 在学校里学过C和C++,不过学的很一般,现在自学C#,会不会很难?
- 全国计算机二级C语言笔试题
- 已知某树有2个2度结点,3个3度结点,4个4度结点,问有几个叶子结点?
- c++数据结构内部排序问题,整数排序
- 2012九月计算机二级C语言全国题库,,急求急求
- 如果assert只有一个字符串作为参数,是什么意思呢?
- C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,谢谢了!
- 为什么用结构体编写的程序输入是,0输不出来啊~~~
- 将IEEE—754的十六进制转化为十进制浮点类型,用C或C++都行,多谢各位大侠啊,非常感谢!
- 为什么这个程序求不出公式?
- 这个链表倒置的算法请大家分析下
- c语言函数库调用
- C语言unsigned int纠错
- C语言快排求解啊