P9980 [USACO23DEC] Flight Routes G
题目描述
Bessie 最近发现她最喜欢的摇滚艺术家 Elsie Swift 正在表演她最新的“时代之旅”音乐会!不幸的是,票卖光的太快了,所以 Bessie 考虑飞往另一个城市参加音乐会。“时代之旅”将在编号为 1…N1\dots N1…N 的 NNN(2≤N≤7502 \le N \le 7502≤N≤750)座城市上演,每对满足 i<ji<ji<j 的城市对 (i,j)(i,j)(i,j) 都可能存在从 iii 到 jjj 的一条单向直飞航班。
从城市 aaa 到城市 bbb 的一条航线是一个包含 k≥2k\ge 2k≥2 座城市的序列 a=c1<c2<⋯<ck=ba=c_1<c_2<\cdots<c_k=ba=c1<c2<⋯<ck=b,使得对于所有的 1≤i<k1\le i< k1≤i<k,城市 cic_{i}ci 到城市 ci+1c_{i+1}ci+1 有单向直飞航班。对于所有满足 i<ji<ji<j 的城市对 (i,j)(i,j)(i,j),你将被告知它们之间航线数目的奇偶性(000 代表偶数,111 代表奇数)。
在计划她的旅行行程时,Bessie 分心了。现在她想知道,有多少对城市间有单向直飞航班。可以证明答案是唯一的。
输入格式
第一行包含整数 NNN。
接下来 N−1N-1N−1 行,第 iii 行包含 N−iN-iN−i 个整数。第 iii 行的第 jjj 个整数表示从城市 iii 到城市 i+ji+ji+j 的航线数目的奇偶性。
输出格式
输出有单向直飞航班的城市对数。
输入输出样例 #1
输入 #1
3
11
1
输出 #1
2
输入输出样例 #2
输入 #2
5
1111
101
01
1
输出 #2
6
说明/提示
样例解释 1
有两条单向直飞航班:1→21\rightarrow 21→2 和 2→32\rightarrow 32→3。有城市 1,21,21,2 之间、2,32,32,3 之间,仅包含一条单向直飞航班的航线各一条。还有城市 1,31,31,3 之间的航线一条(1→2→31\rightarrow 2\rightarrow 31→2→3)。
样例解释 2
有六条单向直飞航班:1→21\rightarrow 21→2,1→41 \rightarrow 41→4,1→51\rightarrow 51→5,2→32\rightarrow 32→3,3→53\rightarrow 53→5,4→54\rightarrow 54→5。这导致的航线数如下表所示:
| 出发地\目的地 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 1 | 0 | 1 | 1 | 1 | 3 |
| 2 | 0 | 0 | 1 | 0 | 1 |
| 3 | 0 | 0 | 0 | 0 | 1 |
| 4 | 0 | 0 | 0 | 0 | 1 |
| 5 | 0 | 0 | 0 | 0 | 0 |
这与输入是相符的。
测试点性质
- 测试点 3−43-43−4 满足 N≤6N \le 6N≤6。
- 测试点 5−125-125−12 满足 N≤100N \le 100N≤100。
- 测试点 13−2213-2213−22 没有额外限制。
C++实现
#include <algorithm>
#include <iostream>
#include <vector>
#include <bitset>
#include <string>
#include <array>
using namespace std;
array<bitset<1500>,750> matrix;
int main(int argc,char* argv[],char* envp[])
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int cnt;
cin>>cnt;
for(int i=0;i<cnt;matrix[i].set(i),matrix[i].set(i+cnt),i++)
for(int j=i+1;j<cnt;j++)
{
char tmp;
cin>>tmp;
matrix[i][j]=tmp-'0';
}
for(int i=0;i<cnt;i++)
for(int j=0;j<i;j++)
if(matrix[j][i])
matrix[j]^=matrix[i];
int answer=0;
for(int i=0;i<cnt;i++)
for(int j=i+1;j<cnt;j++)
answer+=matrix[i][j+cnt];
cout<<answer;
return 0;
}

后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容
用C++实现信奥题 P9980 USACO23DEC Flight Routes G&spm=1001.2101.3001.5002&articleId=162115058&d=1&t=3&u=8a348e9fe2894ce08f158606d687c147)
794

被折叠的 条评论
为什么被折叠?



