P2181 对角线
题目描述
对于一个 n 个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。
例如,6 边形:
这里可以注意到并没有出现多条对角线交叉在一个点的情况。
#include <iostream>
using namespace std;
int main()
{
long long int n = 0;
cin >> n;
long long int ans = 0;
long long int temp = 1;
while (temp < (n - 2))
{
ans += temp * (n - temp - 2);
temp++;
}
if (n % 4 == 0)
{
n /= 4;
}
else if (n % 2 == 0)
{
n /= 2;
ans /= 2;
}
else
{
ans /= 4;
}
ans *= n;
cout << ans << endl;
return 0;
}
思路:1.先选择一条对角线,将多边形分为两个部分,一边是一个点的,另一边是剩下的点,两边的点相连形成的对角线与所选择的对角线相交形成交点。
2.以此类推,现分为一边是1个点的,然后这一边的点逐渐增加,直到另外一边也只剩下一个点为止。需要特别注意的是,这样的每一组对角线都有n条,这样重复计算了比如点c到点b和点b到点c,其实是同一条。再根据题意,每个交点是由两个对角线形成的,而我们在计算点的时候用每条对角线都计算了一次,所以又重复计算了一遍。也就是说,这样我们得到的ans是最终正确ans的4倍。
特别注意,我将乘n的操作挪到了外面,把除以4的操作提前了,避免在运算的过程中出现数据上溢的情况。
P1085 [NOIP2004 普及组] 不高兴的津津
题目描述
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
输入格式
输入包括77行数据,分别表示周一到周日的日程安排。每行包括两个小于1010的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。
输出格式
一个数字。如果不会不高兴则输出00,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 71,2,3,4,5,6,7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
输入输出样例
输入
5 3
6 2
7 2
5 3
5 4
0 4
0 6
输出
3
说明/提示 noip2004普及组第1题
#include<stdio.h>
int main(){
int i,j,c,d,b=0,a=0;//j<8就直接输出a=0
for(int i=1;i<=7;i++){
scanf("%d %d",&c,&d);
j=c+d;
if((j>b)&&(j>8)){
b=j;
a=i;
}
}
printf("%d\n",a);
return 0;
}
P1888 三角函数
题目描述
输入一组勾股数 a,b,c用分数格式输出其较小锐角的正弦值。(要求约分。)
输入格式
一行,包含三个正整数,即勾股数 a,b,c(无大小顺序)。
输出格式
一行,包含一个分数,即较小锐角的正弦值
输入输出样例
输入
3 5 4
输出
3/5
说明/提示
数据保证:a,b,ca,b,c 为正整数且 ∈[1,10 9 ]。
#include<bits/stdc++.h>//万能开头
using namespace std;
int main(){
int a,b,c,i;
cin>>a>>b>>c;
if(a>b&&a>c){
if(b>c){
i=__gcd(a,c);
cout<<c/i<<"/"<<a/i;
}else{
i=__gcd(a,b);
cout<<b/i<<"/"<<a/i;
}
}else if(b>a&&b>c){
if(a>c){
i=__gcd(b,c);
cout<<c/i<<"/"<<b/i;
}else{
i=__gcd(b,a);
cout<<a/i<<"/"<<b/i;
}
}else if(c>b&&c>a){
if(b>a){
i=__gcd(a,c);
cout<<a/i<<"/"<<c/i;
}else{
i=__gcd(b,c);
cout<<b/i<<"/"<<c/i;
}
}
return 0;
}
注意:这题最重要的是约分