1002-C++ to Python
来源: 杭电杯超级联赛2 算法: 字符串, 语法 补完: Yes 完成时间: July 31, 2022
题解
去除字母下划线冒号, 保留数字逗号和括号即可
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <bits/stdc++.h> using namespace std;int T;void solve () { string a; cin>>a; int len=a.length (); for (int i=0 ;i<len;i++) if (!isalpha (a[i])&&(a[i]!='_' )&&(a[i]!=':' )) printf ("%c" ,a[i]); printf ("\n" ); } int main () { cin>>T; while (T--)solve (); return 0 ; }
1007-Snatch Groceries
来源: 杭电杯超级联赛2 算法: 贪心 补完: Yes 完成时间: August 24, 2022
题解
很鸡的抢票服务器给大家提供服务, 每个人有抢到票的置信区间, 若有人同时抢票服务器就寄了, 问有多少人能抢到票.
区间排序后挨个取答案, 发现时间冲突了就退出循环.
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 #include <bits/stdc++.h> #define int long long using namespace std;int n;struct Interval { int start; int finish; bool operator <(const Interval other) const { return start<other.start||(start==other.start&&finish<other.finish); } }; int dep (vector<Interval> intervals) { intervals.push_back ({(int )1e9 +10 ,(int )1e9 +10 }); sort (intervals.begin (),intervals.end ()); int temp = 0 ; for (int i = 0 ; i < n; ++i) { if (intervals[i].finish<intervals[i+1 ].start) { ++temp; } else { break ; } } return temp; } void solve () { cin>>n; vector<Interval> time; int start, finish; for (int i = 1 ; i <= n; ++i) { cin>>start>>finish; time.push_back ({start,finish}); } cout<<dep (time)<<endl; } signed main () { ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); int T = 1 ; cin>>T; while (T--) { solve (); } return 0 ; }
1012-Luxury cruise ship
来源: 杭电杯超级联赛2 算法: 动态规划 题目链接: https://acm.hdu.edu.cn/showproblem.php?pid=7161 补完: Yes 完成时间: August 26, 2022
题解
每天可以存\(7/31/365\) 个硬币, 直到攒够\(N\) 个硬币可以买游艇, 问最少要多少天恰好攒够.
每天攒得越多越则天数可以越少, 但是\(7/31/365\) 三者互质, 不能相互取代. 但当\(N>7*31*365\) 时, 就可以考虑优先攒\(7*31\) 个\(365\) . 剩余的部分用完全背包处理.
设\(dp[i]\) 为攒\(i\) 个硬币所花最少天数, 有:
\[
dp[i] = \min(dp[i],dp[i-7/31/365]+1)
\]
初始有
\[
dp[0]= 0
\]
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #include <bits/stdc++.h> using namespace std;#define int long long const int MAXN = 7 *31 *365 ;int c[3 ] = {7 ,31 ,365 };int dp[MAXN+5 ];void init () { for (int i = 0 ; i <= MAXN; ++i) { dp[i] = 1e18 ; } dp[0 ] = 0 ; for (int i = 0 ; i < 3 ; ++i) { for (int j = c[i]; j <= MAXN; ++j) { dp[j] = min (dp[j],dp[j-c[i]]+1 ); } } } void solve () { int n; cin>>n; int ans = 0 ; if (n>=MAXN) { ans += n/MAXN*7 *31 ; n %= MAXN; } if (dp[n]!=1e18 ) { cout<<ans + dp[n]<<endl; } else { cout<<"-1" <<endl; } } signed main () { ios::sync_with_stdio (false ); cin.tie (0 ); cout.tie (0 ); init (); int T = 1 ; cin>>T; while (T--) { solve (); } return 0 ; }