├── README.md ├── line_endings.py └── src ├── 1068 - Weird Algorithm.cpp ├── 1069 - Repetitions.cpp ├── 1070 - Permutations.cpp ├── 1071 - Number Spiral.cpp ├── 1072 - Two Knights.cpp ├── 1073 - Towers.cpp ├── 1074 - Stick Lengths.cpp ├── 1075 - Permutations II.cpp ├── 1076 - Sliding Median.cpp ├── 1077 - Sliding Cost.cpp ├── 1078 - Grid Paths.cpp ├── 1079 - Binomial Coefficients.cpp ├── 1081 - Common Divisors.cpp ├── 1082 - Sum of Divisors.cpp ├── 1083 - Missing Number.cpp ├── 1084 - Apartments.cpp ├── 1085 - Array Division.cpp ├── 1086 - Writing Numbers.cpp ├── 1087 - Shortest Subsequence.cpp ├── 1090 - Ferris Wheel.cpp ├── 1091 - Concert Tickets.cpp ├── 1092 - Two Sets.cpp ├── 1093 - Two Sets II.cpp ├── 1094 - Increasing Array.cpp ├── 1095 - Exponentiation.cpp ├── 1096 - Throwing Dice.cpp ├── 1097 - Removal Game.cpp ├── 1098 - Nim Game II.cpp ├── 1099 - Stair Game.cpp ├── 1110 - Minimal Rotation.cpp ├── 1111 - Longest Palindrome.cpp ├── 1112 - Required Substring.cpp ├── 1113 - String Transform.cpp ├── 1130 - Tree Matching.cpp ├── 1131 - Tree Diameter.cpp ├── 1132 - Tree Distances I.cpp ├── 1133 - Tree Distances II.cpp ├── 1134 - Prüfer Code.cpp ├── 1135 - Distance Queries.cpp ├── 1136 - Counting Paths.cpp ├── 1137 - Subtree Queries.cpp ├── 1138 - Path Queries.cpp ├── 1139 - Distinct Colors.cpp ├── 1140 - Projects.cpp ├── 1141 - Playlist.cpp ├── 1142 - Advertisement.cpp ├── 1143 - Hotel Queries.cpp ├── 1144 - Salary Queries.cpp ├── 1145 - Increasing Subsequence.cpp ├── 1146 - Counting Bits.cpp ├── 1147 - Maximum Building I.cpp ├── 1149 - String Removals.cpp ├── 1157 - Number Grid.cpp ├── 1158 - Book Shop.cpp ├── 1159 - Book Shop II.cpp ├── 1160 - Planets Queries II.cpp ├── 1161 - Stick Divisions.cpp ├── 1162 - Sorting Methods.cpp ├── 1163 - Traffic Lights.cpp ├── 1164 - Room Allocation.cpp ├── 1188 - Bit Inversions.cpp ├── 1190 - Subarray Sum Queries.cpp ├── 1192 - Counting Rooms.cpp ├── 1193 - Labyrinth.cpp ├── 1194 - Monsters.cpp ├── 1195 - Flight Discount.cpp ├── 1196 - Flight Routes.cpp ├── 1197 - Cycle Finding.cpp ├── 1202 - Investigation.cpp ├── 1203 - Visiting Cities.cpp ├── 1617 - Bit Strings.cpp ├── 1618 - Trailing Zeros.cpp ├── 1619 - Restaurant Customers.cpp ├── 1620 - Factory Machines.cpp ├── 1621 - Distinct Numbers.cpp ├── 1622 - Creating Strings.cpp ├── 1623 - Apple Division.cpp ├── 1624 - Chessboard and Queens.cpp ├── 1625 - Grid Paths.cpp ├── 1628 - Meet in the Middle.cpp ├── 1629 - Movie Festival.cpp ├── 1630 - Tasks and Deadlines.cpp ├── 1631 - Reading Books.cpp ├── 1632 - Movie Festival II.cpp ├── 1633 - Dice Combinations.cpp ├── 1634 - Minimizing Coins.cpp ├── 1635 - Coin Combinations I.cpp ├── 1636 - Coin Combinations II.cpp ├── 1637 - Removing Digits.cpp ├── 1638 - Grid Paths.cpp ├── 1639 - Edit Distance.cpp ├── 1640 - Sum of Two Values.cpp ├── 1641 - Sum of Three Values.cpp ├── 1642 - Sum of Four Values.cpp ├── 1643 - Maximum Subarray Sum.cpp ├── 1644 - Maximum Subarray Sum II.cpp ├── 1645 - Nearest Smaller Values.cpp ├── 1646 - Static Range Sum Queries.cpp ├── 1647 - Static Range Minimum Queries.cpp ├── 1648 - Dynamic Range Sum Queries.cpp ├── 1649 - Dynamic Range Minimum Queries.cpp ├── 1650 - Range Xor Queries.cpp ├── 1651 - Range Update Queries.cpp ├── 1652 - Forest Queries.cpp ├── 1653 - Elevator Rides.cpp ├── 1654 - Bit Problem.cpp ├── 1655 - Maximum Xor Subarray.cpp ├── 1660 - Subarray Sums I.cpp ├── 1661 - Subarray Sums II.cpp ├── 1662 - Subarray Divisibility.cpp ├── 1664 - Movie Festival Queries.cpp ├── 1666 - Building Roads.cpp ├── 1667 - Message Route.cpp ├── 1668 - Building Teams.cpp ├── 1669 - Round Trip.cpp ├── 1670 - Swap Game.cpp ├── 1671 - Shortest Routes I.cpp ├── 1672 - Shortest Routes II.cpp ├── 1673 - High Score.cpp ├── 1674 - Subordinates.cpp ├── 1675 - Road Reparation.cpp ├── 1676 - Road Construction.cpp ├── 1677 - Network Breakdown.cpp ├── 1678 - Round Trip II.cpp ├── 1679 - Course Schedule.cpp ├── 1680 - Longest Flight Route.cpp ├── 1681 - Game Routes.cpp ├── 1682 - Flight Routes Check.cpp ├── 1683 - Planets and Kingdoms.cpp ├── 1684 - Giant Pizza.cpp ├── 1686 - Coin Collector.cpp ├── 1687 - Company Queries I.cpp ├── 1688 - Company Queries II.cpp ├── 1689 - Knight's Tour.cpp ├── 1690 - Hamiltonian Flights.cpp ├── 1691 - Mail Delivery.cpp ├── 1692 - De Bruijn Sequence.cpp ├── 1693 - Teleporters Path.cpp ├── 1694 - Download Speed.cpp ├── 1695 - Police Chase.cpp ├── 1696 - School Dance.cpp ├── 1697 - Chess Tournament.cpp ├── 1700 - Tree Isomorphism I.cpp ├── 1701 - Tree Isomorphism II.cpp ├── 1702 - Tree Traversals.cpp ├── 1704 - Network Renovation.cpp ├── 1706 - School Excursion.cpp ├── 1707 - Graph Girth.cpp ├── 1709 - Coin Grid.cpp ├── 1711 - Distinct Routes.cpp ├── 1712 - Exponentiation II.cpp ├── 1713 - Counting Divisors.cpp ├── 1715 - Creating Strings II.cpp ├── 1716 - Distributing Apples.cpp ├── 1717 - Christmas Party.cpp ├── 1722 - Fibonacci Numbers.cpp ├── 1723 - Graph Paths I.cpp ├── 1724 - Graph Paths II.cpp ├── 1725 - Dice Probability.cpp ├── 1726 - Moving Robots.cpp ├── 1727 - Candy Lottery.py ├── 1728 - Inversion Probability.cpp ├── 1729 - Stick Game.cpp ├── 1730 - Nim Game I.cpp ├── 1731 - Word Combinations.cpp ├── 1732 - Finding Borders.cpp ├── 1733 - Finding Periods.cpp ├── 1734 - Distinct Values Queries.cpp ├── 1735 - Range Updates and Sums.cpp ├── 1736 - Polynomial Queries.cpp ├── 1737 - Range Queries and Copies.cpp ├── 1739 - Forest Queries II.cpp ├── 1740 - Intersection Points.cpp ├── 1743 - String Reorder.cpp ├── 1744 - Rectangle Cutting.cpp ├── 1745 - Money Sums.cpp ├── 1746 - Array Description.cpp ├── 1747 - Pyramid Array.cpp ├── 1748 - Increasing Subsequence II.cpp ├── 1749 - List Removals.cpp ├── 1750 - Planets Queries I.cpp ├── 1751 - Planets Cycles.cpp ├── 1753 - String Matching.cpp ├── 1754 - Coin Piles.cpp ├── 1755 - Palindrome Reorder.cpp ├── 1756 - Acyclic Grpah Edges.cpp ├── 2064 - Bracket Sequences I.cpp ├── 2072 - Cut and Paste.cpp ├── 2073 - Substring Reversals.cpp ├── 2074 - Reversals and Sums.cpp ├── 2076 - Necessary Roads.cpp ├── 2077 - Necessary Cities.cpp ├── 2078 - Eulerian Subgraphs.cpp ├── 2079 - Finding a Centroid.cpp ├── 2080 - Fixed-Length Paths I.cpp ├── 2081 - Fixed-Length Paths II.cpp ├── 2084 - Monster Game I.cpp ├── 2086 - Subarray Squares.cpp ├── 2087 - Houses and Schools.cpp ├── 2088 - Knuth Division.cpp ├── 2101 - New Roads Queries.cpp ├── 2102 - Finding Patterns.cpp ├── 2103 - Counting Patterns.cpp ├── 2104 - Pattern Positions.cpp ├── 2105 - Distinct Substrings.cpp ├── 2106 - Repeating Substring.cpp ├── 2107 - String Functions.cpp ├── 2108 - Substring Order I.cpp ├── 2109 - Substring Order II.cpp ├── 2110 - Substring Distribution.cpp ├── 2134 - Path Queries II.cpp ├── 2136 - Hamming Distance.cpp ├── 2137 - Beautiful Subgrids.cpp ├── 2138 - Reachable Nodes.cpp ├── 2143 - Reachability Queries.cpp ├── 2162 - Josephus Problem I.cpp ├── 2163 - Josephus Problem II.cpp ├── 2164 - Josephus Queries.cpp ├── 2165 - Tower of Hanoi.cpp ├── 2166 - Prefix Sum Queries.cpp ├── 2168 - Nested Ranges Check.cpp ├── 2169 - Nested Ranges Count.cpp ├── 2177 - Strongly Connected Edges.cpp ├── 2181 - Counting Tilings.cpp ├── 2182 - Divisor Analysis.cpp ├── 2183 - Missing Coin Sum.cpp ├── 2185 - Prime Multiples.cpp ├── 2187 - Bracket Sequences II.cpp ├── 2189 - Point Location Test.cpp ├── 2190 - Line Segment Intersection.cpp ├── 2191 - Polygon Area.cpp ├── 2192 - Point in Polygon.cpp ├── 2193 - Polygon Lattice Points.cpp ├── 2194 - Minimum Euclidean Distance.cpp ├── 2195 - Convex Hull.cpp ├── 2205 - Gray Code.cpp ├── 2206 - Pizzeria Queries.cpp ├── 2207 - Grundy's Game.cpp ├── 2208 - Another Game.cpp ├── 2209 - Counting Necklaces.cpp ├── 2210 - Counting Grids.cpp ├── 2216 - Collecting Numbers.cpp ├── 2217 - Collecting Numbers II.cpp ├── 2220 - Counting Numbers.cpp ├── 2413 - Counting Towers.cpp ├── 2417 - Counting Coprime Pairs.cpp ├── 2420 - Palindrome Queries.cpp ├── 2428 - Subarray Distinct Values.cpp └── 2431 - Digit Queries.cpp /line_endings.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | WINDOWS_LINE_ENDING = b'\r\n' 5 | MAC_LINE_ENDING = b'\r' 6 | UNIX_LINE_ENDING = b'\n' 7 | 8 | # relative or absolute file path, e.g.: 9 | dir = "src/" 10 | for filename in os.listdir(dir): 11 | file_path = dir+filename 12 | 13 | with open(file_path, 'rb') as open_file: 14 | content = open_file.read() 15 | 16 | content = content.replace(MAC_LINE_ENDING, UNIX_LINE_ENDING) 17 | 18 | with open(file_path, 'wb') as open_file: 19 | open_file.write(content) -------------------------------------------------------------------------------- /src/1070 - Permutations.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Permutations 3 | Problem Link: https://cses.fi/problemset/task/1070 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int n; cin>>n; 20 | if (n == 1) cout<<1; 21 | else if (n < 4) cout<<"NO SOLUTION"; 22 | else { 23 | for (int i = 2; i <= n; i += 2) 24 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int md = 1e9+7; 13 | signed main(){ 14 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 15 | #ifdef LOCAL 16 | freopen("input.txt", "r" , stdin); 17 | freopen("output.txt", "w", stdout); 18 | #endif 19 | 20 | //A002464 - OEIS 21 | int n; cin>>n; 22 | int dp[n+1] = {0}; 23 | dp[0] = 1, dp[1] = 1; 24 | for (int i = 4; i <= n; i++) { 25 | dp[i] = (i+1)*dp[i-1] - (i-2)*dp[i-2] 26 | - (i-5)*dp[i-3] + (i-3)*dp[i-4]; 27 | dp[i]%=md; 28 | dp[i] = (dp[i] + md)%md; 29 | } 30 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int md = 1e9+7, mxN = 2e6+6, N = 2e3+3; 13 | int dp[N], F[mxN], I[mxN]; 14 | 15 | int exp(int x, int y, int md){ 16 | int ans = 1; 17 | x = x%md; 18 | while (y > 0) { 19 | if (y&1) 20 | ans = ans*x%md; 21 | y = y>>1; 22 | x = x*x%md; 23 | } 24 | return ans; 25 | } 26 | 27 | int C(int n, int k) { 28 | if (k > n) return 0; 29 | return F[n] * I[k] % md * I[n-k] % md; 30 | } 31 | 32 | signed main() { 33 | cin.tie(0)->sync_with_stdio(0); 34 | #ifdef LOCAL 35 | freopen("input.txt", "r" , stdin); 36 | freopen("output.txt", "w", stdout); 37 | #endif 38 | 39 | F[0] = 1, I[0] = 1; 40 | for (int i = 1; i < mxN; i++) { 41 | F[i] = F[i-1] * i % md; 42 | I[i] = exp(F[i], md-2, md); 43 | } 44 | 45 | int n, k; cin >> n >> k; 46 | vector> v(k); 47 | for (auto &[i, j]: v) { 48 | cin >> i >> j; 49 | i--, j--; 50 | } 51 | v.push_back({n-1, n-1}); 52 | 53 | sort(v.begin(), v.end()); 54 | for (int i = 0; i <= k; i++) { 55 | auto [x, y] = v[i]; 56 | dp[i] = C(x+y, x); 57 | for (int j = 0; j < i; j++) { 58 | auto [a, b] = v[j]; 59 | if (b > y) continue; 60 | dp[i] = (dp[i] - dp[j] * C(x+y-a-b, x-a) % md + md) % md; 61 | } 62 | } 63 | cout << dp[k]; 64 | } -------------------------------------------------------------------------------- /src/1082 - Sum of Divisors.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Sum of Divisors 3 | Problem Link: https://cses.fi/problemset/task/1082 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define pb push_back 17 | #define F first 18 | #define S second 19 | 20 | const int inf = 1LL<<62; 21 | const int md = 1000000007; 22 | 23 | int exp(int x, unsigned int y, int p){ 24 | int res=1; x=x%p; 25 | while(y>0){ 26 | if (y&1) res= (res*x)%p; y=y>>1; x=(x*x)%p; 27 | } 28 | return res; 29 | } 30 | void solve(){ 31 | //calculte in two parts 32 | //1st - contribution of each number upto sqrt(n) 33 | //2nd - from sqrt(n) to n calculate how many numbers give 1, 2, 3...sqrt(n) contribution 34 | int n; cin>>n; 35 | int s = 0; 36 | int sq = sqrt(n); 37 | int inv = exp(2,md-2,md); 38 | for (int i = 1; i <= sq; i++) { 39 | int x = (n/i - n/(i+1))%md; 40 | int r = n/i, l = n/(i+1) + 1; 41 | s = ( s + x*((l+r)%md)%md*inv%md*i%md)%md; 42 | } 43 | for (int i = 1; i <= n/(sq+1); i++) { 44 | s = (s + n/i*i) % md; 45 | } 46 | cout<< s; 47 | } 48 | signed main(){ 49 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 50 | #ifdef LOCAL 51 | freopen("input.txt", "r" , stdin); 52 | freopen("output.txt", "w", stdout); 53 | #endif 54 | int t=1; 55 | //cin>>t; 56 | for (int i = 1; i <= t; i++) { 57 | solve(); 58 | // cout<<'\n'; 59 | } 60 | } -------------------------------------------------------------------------------- /src/1086 - Writing Numbers.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Writing Numbers 3 | Problem Link: https://cses.fi/problemset/task/1086 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | bool check(int n, int k) { 13 | int ans = 0; 14 | for (int i = 1; i <= n; i*=10) { 15 | int d = i*10; 16 | ans += n/d*i + min(max(n%d-i+1,0LL), i); 17 | } 18 | if (ans <= k) return 1; 19 | return 0; 20 | } 21 | signed main(){ 22 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 23 | #ifdef LOCAL 24 | freopen("input.txt", "r" , stdin); 25 | freopen("output.txt", "w", stdout); 26 | #endif 27 | 28 | int k; cin>>k; 29 | int l = 1, h = 6e17; 30 | int ans = 1; 31 | while(l <= h ) { 32 | int m = (l+h)/2; 33 | if (check(m, k)) { 34 | ans = m; 35 | l = m + 1; 36 | } 37 | else h = m - 1; 38 | } 39 | cout< 7 | using namespace std; 8 | 9 | // #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | string s; cin>>s; 20 | int l = 0, r = 0; 21 | bool a = 0, b = 0, c = 0, d = 0; 22 | int n = s.size(); 23 | string ans; 24 | while(l < n) { 25 | a = 0, b = 0, c = 0, d = 0; 26 | a += (s[l] == 'A'); b += (s[l] == 'C'); 27 | c += (s[l] == 'G'); d += (s[l] == 'T'); 28 | r = l+1; 29 | while(r < n && a+b+c+d != 4) { 30 | a += (s[r] == 'A'); b += (s[r] == 'C'); 31 | c += (s[r] == 'G'); d += (s[r] == 'T'); 32 | r++; 33 | } 34 | if (a+b+c+d == 4) 35 | ans += s[r-1]; 36 | l = r; 37 | } 38 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | int dp[500005]; 46 | void solve(){ 47 | int n; see(n); 48 | if (n%4!=0 && n%4!=3) {put(0); return;} 49 | vi v; 50 | int s = (n+1)*n/4;dp[0]=1; 51 | rep(i,1,n) v.pb(i); 52 | rep(i,0,n-1){ 53 | rev(j,s,0){ 54 | if (j-v[i]>=0) (dp[j]+=dp[j-v[i]])%=md; 55 | } 56 | } 57 | put(dp[s]); 58 | } 59 | signed main(){ 60 | IOS; 61 | #ifdef LOCAL 62 | freopen("input.txt", "r" , stdin); 63 | freopen("output.txt", "w", stdout); 64 | #endif 65 | int t=1; 66 | //cin>>t; 67 | while(t--){ 68 | solve(); 69 | //cout<<'\n'; 70 | } 71 | #ifdef LOCAL 72 | clock_t tStart = clock(); 73 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | void solve(){ 46 | int a,b; see(a,b); 47 | int ans=1; 48 | while(b){ 49 | if (b&1) ans*=a; 50 | a*=a;b>>=1; 51 | a%=md; ans%=md; 52 | } 53 | put(ans); 54 | } 55 | signed main(){ 56 | IOS; 57 | #ifdef LOCAL 58 | freopen("input.txt", "r" , stdin); 59 | freopen("output.txt", "w", stdout); 60 | #endif 61 | int t=1; 62 | cin>>t; 63 | while(t--){ 64 | solve(); 65 | cout<<'\n'; 66 | } 67 | #ifdef LOCAL 68 | clock_t tStart = clock(); 69 | cerr< 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define pb push_back 17 | #define F first 18 | #define S second 19 | 20 | const int inf = 1LL<<62; 21 | const int md = 1000000007; 22 | 23 | vector> mul(vector> a, vector> b) { 24 | vector> c(6, vector(b[0].size())); 25 | for (int i = 0; i < 6; i++) 26 | for (int j = 0; j < b[0].size(); j++) 27 | for ( int k = 0; k < 6; k++) 28 | (c[i][j] += a[i][k]*b[k][j]%md)%=md; 29 | return c; 30 | } 31 | 32 | vector> exp(vector> x, unsigned int y){ 33 | vector> res(6, vector(6)); 34 | for ( int i = 0; i < 6; i++) 35 | res[i][i] = 1; 36 | 37 | while(y>0){ 38 | if (y&1) { 39 | res = mul(res,x); 40 | } 41 | y=y>>1; 42 | x = mul(x,x); 43 | } 44 | return res; 45 | } 46 | void solve(){ 47 | vector> x(6, vector(6)); 48 | for (int i = 0; i < 5; i++) 49 | x[i][i+1] = 1, x[5][i] = 1; 50 | x[5][5] = 1; 51 | int n; cin>>n; 52 | x = exp(x,n); 53 | cout<< x[5][5]; 54 | } 55 | signed main(){ 56 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 57 | #ifdef LOCAL 58 | freopen("input.txt", "r" , stdin); 59 | freopen("output.txt", "w", stdout); 60 | #endif 61 | int t=1; 62 | //cin>>t; 63 | for (int i = 1; i <= t; i++) { 64 | solve(); 65 | cout<<'\n'; 66 | } 67 | } -------------------------------------------------------------------------------- /src/1098 - Nim Game II.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Nim Game II 3 | Problem Link: https://cses.fi/problemset/task/1098 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define pb push_back 17 | #define F first 18 | #define S second 19 | 20 | const int inf = 1LL<<62; 21 | const int md = 1000000007; 22 | 23 | void solve(){ 24 | int n; cin>>n; 25 | int x = 0; 26 | for (int i = 0; i < n; i++) { 27 | int a; cin>>a; 28 | x^=(a%4); 29 | } 30 | if (x) cout<<"first"; 31 | else cout<<"second"; 32 | } 33 | signed main(){ 34 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #ifdef LOCAL 36 | freopen("input.txt", "r" , stdin); 37 | freopen("output.txt", "w", stdout); 38 | #endif 39 | int t=1; 40 | cin>>t; 41 | for (int i = 1; i <= t; i++) { 42 | solve(); 43 | cout<<'\n'; 44 | } 45 | } -------------------------------------------------------------------------------- /src/1099 - Stair Game.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Stair Game 3 | Problem Link: https://cses.fi/problemset/task/1099 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define ff first 17 | #define ss second 18 | #define endl '\n' 19 | 20 | const long long inf = 1LL<<60; //1.5e18 21 | const int md = 1000000007; 22 | 23 | void solve(){ 24 | int n; cin>>n; 25 | //even positions do not contribute 26 | int a[n]; 27 | int x = 0; 28 | for(int i =0; i < n; i++) { 29 | cin>>a[i]; 30 | if (i&1) x^=a[i]; 31 | } 32 | if (x) cout<<"first"; 33 | else cout<<"second"; 34 | 35 | } 36 | signed main(){ 37 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 38 | #ifdef LOCAL 39 | freopen("input.txt", "r" , stdin); 40 | freopen("output.txt", "w", stdout); 41 | #endif 42 | int t=1; 43 | cin>>t; 44 | for (int i = 1; i <= t; i++) { 45 | //cout<<"Case #"< 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define F first 17 | #define S second 18 | 19 | const long long inf = 1LL<<62; 20 | const int md = 1000000007; 21 | 22 | void solve(){ 23 | string s; 24 | cin>>s; 25 | s+=s; 26 | int n = s.size(); 27 | int i = 0; 28 | int ans = 0; 29 | while (i < n/2) { 30 | ans = i; 31 | int k = i, j = i + 1; 32 | while (j < n && s[j] >= s[k]) { 33 | if (s[j] == s[k]) k++; 34 | if (s[j] > s[k] ) k = i; 35 | j++; 36 | } 37 | while(i <= k) i += j - k; 38 | } 39 | cout<>t; 49 | for (int i = 1; i <= t; i++) { 50 | solve(); 51 | cout<<'\n'; 52 | } 53 | } -------------------------------------------------------------------------------- /src/1111 - Longest Palindrome.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Longest Palindrome 3 | Problem Link: https://cses.fi/problemset/task/1111 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define F first 17 | #define S second 18 | 19 | const long long inf = 1LL<<62; 20 | const int md = 1000000007; 21 | 22 | void solve(){ 23 | string s; cin>>s; 24 | int n = s.size(); 25 | int dp[n][2] = {0}; 26 | int x1 = 0, y1 = -1; 27 | int x2 = 0, y2 = -1; 28 | int mx = 0, ans = 0; 29 | for (int i = 0; i < n; i++) { 30 | int k = 0; 31 | if (i>y1) k = 1; 32 | else k = min(dp[x1+y1-i][0], y1-i+1); 33 | while (0<=i-k && i+ky1) x1 = i-k, y1 = i+k; 36 | if (2*dp[i][0] - 1 > mx) ans = i-k, mx = 2*dp[i][0] - 1; 37 | k = 0; 38 | if (i<=y2) k = min(dp[x2+y2-i+1][1],y2-i+1); 39 | while(0<=i-k-1 && i+ky2) x2 = i-k-1, y2 = i+k; 42 | if (2*dp[i][1] > mx) ans = i-k-1, mx = 2*dp[i][1]; 43 | } 44 | cout<>t; 54 | for (int i = 1; i <= t; i++) { 55 | solve(); 56 | cout<<'\n'; 57 | } 58 | } -------------------------------------------------------------------------------- /src/1113 - String Transform.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: String Transform 3 | Problem Link: https://cses.fi/problemset/task/1113 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | string s; cin>>s; 20 | vector v; 21 | vector a[26]; 22 | int n= s.size(); 23 | for (int i = 0; i < n; i++) { 24 | if (s[i] == '#') 25 | v.push_back(i); 26 | else 27 | a[s[i]-'a'].push_back(i); 28 | } 29 | for (int i = 0; i < 26; i++) { 30 | for (auto j: a[i]) 31 | v.push_back(j); 32 | } 33 | string ans; 34 | int i = v[v[0]]; 35 | while(s[i] != '#') { 36 | ans += s[i]; 37 | i = v[i]; 38 | } 39 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int n; cin>>n; 20 | int pre[n] = {0}, suf[n+1] = {0}, a[n]; 21 | int ans = 0; 22 | stack> q; 23 | for (int i = 0; i < n; i++) { 24 | cin>>a[i]; 25 | while(!q.empty() && q.top().first >= a[i]) 26 | q.pop(); 27 | int x = -1; 28 | if (!q.empty()) { 29 | x = q.top().second; 30 | } 31 | pre[i] = 1 + i-x-1; 32 | q.push({a[i], i}); 33 | } 34 | while(!q.empty()) q.pop(); 35 | 36 | for (int i = n-1; i >= 0; i--) { 37 | while(!q.empty() && q.top().first >= a[i]) 38 | q.pop(); 39 | int x = n; 40 | if (!q.empty()) { 41 | x = q.top().second; 42 | } 43 | suf[i] = 1 + x-i-1; 44 | q.push({a[i], i}); 45 | ans = max(ans, (pre[i]+suf[i]-1)*a[i]); 46 | } 47 | cout< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | int lis(int a[], int n){ 46 | int m=0,y,i,c[n]; 47 | for(int i=0; i>t; 67 | while(t--){ 68 | solve(); 69 | //cout<<'\n'; 70 | } 71 | #ifdef LOCAL 72 | clock_t tStart = clock(); 73 | cerr< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int n; cin>>n; 20 | int dp[50] = {0}; 21 | dp[0] = 1; 22 | for (int i = 1; i < 50; i++) 23 | dp[i] = 2*dp[i-1] + ((1LL<<(i-1)) - 1); 24 | int ans = 0; 25 | while(n>0) { 26 | int b = log2(n); 27 | ans += dp[b]; 28 | b = 1LL< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | int a[1005]; 13 | signed main(){ 14 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 15 | #ifdef LOCAL 16 | freopen("input.txt", "r" , stdin); 17 | freopen("output.txt", "w", stdout); 18 | #endif 19 | 20 | int n,m; cin>>n>>m; 21 | int mx = 0; 22 | for (int i = 0; i < n; i++) { 23 | for (int j = 0; j < m; j++) { 24 | char x; cin>>x; 25 | if (x == '.') a[j]++; 26 | else a[j] = 0; 27 | } 28 | stack st; 29 | for (int j = 0; j <= m; j++) { //pseudo element at end 30 | while(!st.empty() && a[st.top()] > a[j]) { 31 | int s = st.top(); st.pop(); 32 | int area = a[s]*(st.empty() ? j : j-st.top()-1); 33 | mx = max(mx, area); 34 | } 35 | if (j < m) st.push(j); 36 | } 37 | } 38 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 500005; 13 | const int md = 1e9+7; 14 | int dp[mxN]; 15 | int ind[26]; 16 | signed main(){ 17 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 18 | #ifdef LOCAL 19 | freopen("input.txt", "r" , stdin); 20 | freopen("output.txt", "w", stdout); 21 | #endif 22 | 23 | string s; cin>>s; 24 | int n = s.size(); 25 | memset(ind, -1, sizeof ind); 26 | dp[0] = 1; 27 | for (int i = 1; i <= n; i++) { 28 | dp[i] = 2*dp[i-1]; 29 | if (ind[s[i-1]-'a'] >= 0) 30 | dp[i] -= dp[ind[s[i-1]-'a']]; 31 | 32 | dp[i] = (dp[i] + md)%md; 33 | ind[s[i-1]-'a'] = i-1; 34 | } 35 | cout<<(dp[n]-1+md)%md; 36 | } -------------------------------------------------------------------------------- /src/1157 - Number Grid.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Number Grid 3 | Problem Link: https://cses.fi/problemset/task/1157 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int x,y; cin>>x>>y; 20 | cout<<((x-1)^(y-1)); 21 | } -------------------------------------------------------------------------------- /src/1158 - Book Shop.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Book Shop 3 | Problem Link: https://cses.fi/problemset/task/1158 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | int dp[100005]={0}; 46 | void solve(){ 47 | int n,x; see(n,x); 48 | int h[n],s[n]; 49 | seea(h,0,n); seea(s,0,n); 50 | rep(i,0,n){ 51 | rev(j,x,0){ 52 | if (j>=h[i]){ 53 | dp[j] = max(dp[j],dp[j-h[i]]+s[i]); 54 | } 55 | } 56 | } 57 | put(dp[x]); 58 | } 59 | signed main(){ 60 | IOS; 61 | #ifdef LOCAL 62 | freopen("input.txt", "r" , stdin); 63 | freopen("output.txt", "w", stdout); 64 | #endif 65 | int t=1; 66 | //cin>>t; 67 | while(t--){ 68 | solve(); 69 | //cout<<'\n'; 70 | } 71 | #ifdef LOCAL 72 | clock_t tStart = clock(); 73 | cerr< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | int dp[100005]; 13 | signed main(){ 14 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 15 | #ifdef LOCAL 16 | freopen("input.txt", "r" , stdin); 17 | freopen("output.txt", "w", stdout); 18 | #endif 19 | 20 | int n, x; cin>>n>>x; 21 | vector cost; 22 | vector val; 23 | int a[n], b[n], c[n]; 24 | for (int i = 0; i < n; i++) 25 | cin>>a[i]; 26 | for (int i = 0; i < n; i++) 27 | cin>>c[i]; 28 | // conversion to 0-1 knapsack 29 | for (int i = 0; i < n; i++) { 30 | cin>>b[i]; 31 | int x = 1; 32 | while(b[i] - x >=0) { 33 | cost.push_back(x*a[i]); 34 | val.push_back(x*c[i]); 35 | b[i] -= x; 36 | x*=2; 37 | } 38 | if (b[i]) { 39 | cost.push_back(b[i]*a[i]); 40 | val.push_back(b[i]*c[i]); 41 | } 42 | } 43 | n = cost.size(); 44 | for (int i = 0; i < n; i++) { 45 | for (int j = x; j >0; j--) { 46 | if (j >= cost[i]) 47 | dp[j] = max(dp[j], val[i] + dp[j-cost[i]]); 48 | } 49 | } 50 | cout< 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define ff first 17 | #define ss second 18 | #define endl '\n' 19 | 20 | const long long inf = 1LL<<60; //1.5e18 21 | const int md = 1000000007; 22 | 23 | int succ[21][200005]; 24 | int vis[200005]; 25 | int len[200005]; 26 | void dfs(int s) { 27 | if (vis[s]) return; 28 | vis[s] = 1; 29 | dfs(succ[0][s]); 30 | len[s] = len[succ[0][s]] + 1; 31 | } 32 | int lift(int x, int d) { 33 | if (d <=0) return x; 34 | int i = 0; 35 | while(d > 0) { 36 | if (d&1) 37 | x = succ[i][x]; 38 | d>>=1; 39 | i++; 40 | } 41 | return x; 42 | } 43 | void solve(){ 44 | int n,q; cin>>n>>q; 45 | for (int i = 1; i <= n; i++) 46 | cin>>succ[0][i]; 47 | for (int i = 1; i <=20; i++) { 48 | for (int j = 1; j <=n; j++) { 49 | succ[i][j] = succ[i-1][succ[i-1][j]]; 50 | } 51 | } 52 | for (int i = 1; i <=n; i++) 53 | if (!vis[i]) 54 | dfs(i); 55 | while(q--) { 56 | int x,y; cin>>x>>y; 57 | int xx = lift(x, len[x]); //end of the cycle (Case: x and y are in cycle such that x appears after y) 58 | if (lift(x, len[x]-len[y]) == y) //if y is infront of x 59 | cout<>t; 74 | for (int i = 1; i <= t; i++) { 75 | //cout<<"Case #"< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int k,n; cin>>k>>n; 20 | int ans = 0; 21 | multiset s; 22 | for (int i = 0; i < n; i++) { 23 | int x; cin>>x; 24 | s.insert(x); 25 | } 26 | while(s.size() > 1) { 27 | auto x = s.begin(); 28 | s.erase(x); 29 | auto y = s.begin(); 30 | s.erase(y); 31 | ans += *x+*y; 32 | s.insert(*x+*y); 33 | } 34 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 2e5+5; 13 | int bit[mxN]; 14 | void upd(int k) { 15 | for (; k < mxN; k += k&-k) 16 | bit[k]++; 17 | } 18 | int qry(int k) { 19 | int ans = 0; 20 | for (; k > 0; k -= k&-k) 21 | ans += bit[k]; 22 | return ans; 23 | } 24 | vector adj[mxN]; 25 | int c = 0; 26 | bool vis[mxN]; 27 | void dfs(int s){ 28 | if (vis[s]) return; 29 | vis[s]=1; c++; 30 | for (auto i: adj[s]) dfs(i); 31 | } 32 | int ind[mxN]; 33 | signed main(){ 34 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #ifdef LOCAL 36 | freopen("input.txt", "r" , stdin); 37 | freopen("output.txt", "w", stdout); 38 | #endif 39 | 40 | int n; cin>>n; 41 | int a[n]; 42 | int ans1 = 0, ans2 = 0, ans3 = n, ans4 = n; 43 | int mx = 0; 44 | for (int i = 0; i < n; i++) { 45 | cin>>a[i]; 46 | ans1 += qry(mxN) - qry(a[i]); 47 | upd(a[i]); 48 | if (i+1 != a[i]) { 49 | adj[i+1].push_back(a[i]), 50 | adj[a[i]].push_back(i+1); 51 | } 52 | int it = upper_bound(ind, ind+mx+1, a[i]) - ind; 53 | mx = max(mx, it); 54 | ind[it] = a[i]; 55 | } 56 | ans3 = n-mx; 57 | for (int i = 1; i <= n; i++) { 58 | if (!vis[i]) { 59 | c = 0; dfs(i); 60 | ans2 += c-1; 61 | } 62 | } 63 | for (int i = n-1; i >= 0; i--) { 64 | if (a[i] == ans4) 65 | ans4--; 66 | } 67 | cout< 8 | #include 9 | #include 10 | using namespace __gnu_pbds; 11 | using namespace std; 12 | //----------TEMPLATES---------- 13 | template 14 | void see(T&... args) { ((cin >> args), ...);} 15 | template 16 | void put(T&&... args) { ((cout << args << " "), ...);} 17 | template 18 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 19 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 20 | void err(istream_iterator it) {} 21 | template 22 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 23 | //----------MACROS---------- 24 | #define int long long 25 | #define pb push_back 26 | #define F first 27 | #define S second 28 | #define ll long long 29 | #define ull unsigned long long 30 | #define ld long double 31 | #define pii pair 32 | #define vi vector 33 | #define vii vector 34 | #define vc vector 35 | #define nl cout<<'\n' 36 | #define E cerr<<'\n' 37 | #define all(x) x.begin(),x.end() 38 | #define rep(i,a,b) for (int i=a; ib; --i) 40 | #define IOS ios_base::sync_with_stdio(false) 41 | #define setpr(x) cout<>a[i];} 44 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 45 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 46 | #define ordered_set tree, rb_tree_tag,tree_order_statistics_node_update> 47 | //----------CONSTANTS---------- 48 | const ll inf = INT_MAX; 49 | const ld ep = 0.0000001; 50 | const ld pi = acos(-1.0); 51 | const ll md = 1000000007; 52 | //----------GLOBALS---------- 53 | 54 | //----------SOLUTION---------- 55 | void solve(){ 56 | int n; see(n); 57 | set s; 58 | sees(s,n); 59 | put(s.sz); 60 | } 61 | //----------MAIN---------- 62 | signed main(){ 63 | IOS; 64 | #ifndef ONLINE_JUDGE 65 | //freopen("input.txt", "r" , stdin); 66 | //freopen("output.txt", "w", stdout); 67 | #endif 68 | int t=1; 69 | //cin>>t; 70 | while(t--){ 71 | solve(); 72 | //cout<<'\n'; 73 | } 74 | } -------------------------------------------------------------------------------- /src/1624 - Chessboard and Queens.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Chessboard and Queens 3 | Problem Link: https://cses.fi/problemset/task/1624 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | 7 | #include 8 | using namespace std; 9 | #define rep(i,a,b) for (int i=a;i>chess[i][j]; 25 | rec(0); 26 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | struct custom_hash { 13 | static uint64_t splitmix64(uint64_t x) { 14 | // http://xorshift.di.unimi.it/splitmix64.c 15 | x += 0x9e3779b97f4a7c15; 16 | x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9; 17 | x = (x ^ (x >> 27)) * 0x94d049bb133111eb; 18 | return x ^ (x >> 31); 19 | } 20 | 21 | size_t operator()(uint64_t x) const { 22 | static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count(); 23 | return splitmix64(x + FIXED_RANDOM); 24 | } 25 | }; 26 | unordered_map mp; 27 | signed main(){ 28 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 29 | #ifdef LOCAL 30 | freopen("input.txt", "r" , stdin); 31 | freopen("output.txt", "w", stdout); 32 | #endif 33 | 34 | int n, k; cin>>n>>k; 35 | vector v1, v2; 36 | for (int i = 0; i < n/2; i++) { 37 | int x; cin>>x; 38 | v1.push_back(x); 39 | } 40 | for (int i = n/2; i < n; i++) { 41 | int x; cin>>x; 42 | v2.push_back(x); 43 | } 44 | int n1 = n/2; 45 | int n2 = n - n/2; 46 | for (int i = 0; i < (1< 0) { 49 | if (st&1) x += v1[y]; 50 | y++; st>>=1; 51 | } 52 | mp[x]++; 53 | } 54 | int ans = 0; 55 | for (int i = 0; i < (1< 0) { 58 | if (st&1) x+= v2[y]; 59 | y++; st>>=1; 60 | } 61 | if (mp.count(k-x)) ans += mp[k-x]; 62 | } 63 | cout< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | void solve(){ 46 | int n; see(n); 47 | vii v; 48 | rep(i,0,n){ 49 | int x,y; see(x,y); 50 | v.pb({x,y}); 51 | } 52 | sort(all(v)); 53 | int ans=0; 54 | int c=0; 55 | rep(i,0,n){ 56 | c+=v[i].F; 57 | ans+= v[i].S-c; 58 | } 59 | put(ans); 60 | } 61 | signed main(){ 62 | IOS; 63 | #ifndef ONLINE_JUDGE 64 | // freopen("input.txt", "r" , stdin); 65 | // freopen("output.txt", "w", stdout); 66 | #endif 67 | int t=1; 68 | //cin>>t; 69 | while(t--){ 70 | solve(); 71 | //cout<<'\n'; 72 | } 73 | #ifndef ONLINE_JUDGE 74 | clock_t tStart = clock(); 75 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | int dp[1000005]; 46 | void solve(){ 47 | int n; see(n); 48 | dp[0]=1; 49 | rep(i,1,n+1){ 50 | int s=0,j=1; 51 | while (i-j>=0 && j<=6){ 52 | s+=dp[i-j];j++; 53 | } 54 | dp[i]=s%md; 55 | } 56 | put(dp[n]); 57 | } 58 | signed main(){ 59 | IOS; 60 | #ifdef LOCAL 61 | freopen("input.txt", "r" , stdin); 62 | freopen("output.txt", "w", stdout); 63 | #endif 64 | int t=1; 65 | //cin>>t; 66 | while(t--){ 67 | solve(); 68 | //cout<<'\n'; 69 | } 70 | #ifdef LOCAL 71 | clock_t tStart = clock(); 72 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | int dp[1000005]; 46 | void solve(){ 47 | int n,x; see(n,x); 48 | vi v; 49 | seev(v,n); 50 | rep(i,1,x+1){ 51 | dp[i]=inf; 52 | for (auto j: v){ 53 | if (i-j>=0) dp[i] = min(dp[i-j]+1,dp[i]); 54 | } 55 | } 56 | if (dp[x]>t; 67 | while(t--){ 68 | solve(); 69 | //cout<<'\n'; 70 | } 71 | #ifdef LOCAL 72 | clock_t tStart = clock(); 73 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | int dp[1000005]; 46 | void solve(){ 47 | int n,x; see(n,x); 48 | vi v; 49 | seev(v,n);dp[0]=1; 50 | rep(i,1,x+1){ 51 | dp[i]=0; 52 | for (auto j: v){ 53 | if (i-j>=0) dp[i] = (dp[i]+dp[i-j])%md; 54 | } 55 | } 56 | put(dp[x]); 57 | } 58 | signed main(){ 59 | IOS; 60 | #ifdef LOCAL 61 | freopen("input.txt", "r" , stdin); 62 | freopen("output.txt", "w", stdout); 63 | #endif 64 | int t=1; 65 | //cin>>t; 66 | while(t--){ 67 | solve(); 68 | //cout<<'\n'; 69 | } 70 | #ifdef LOCAL 71 | clock_t tStart = clock(); 72 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | int dp[1000005]={0}; 46 | void solve(){ 47 | int n,x; see(n,x); 48 | vi v; seev(v,n); 49 | sort(all(v)); 50 | dp[0]=1; 51 | rep(i,0,n){ 52 | rep(j,1,x+1){ 53 | if (j-v[i]>=0)dp[j]+= dp[j-v[i]]; 54 | dp[j]%=md; 55 | } 56 | } 57 | put(dp[x]); 58 | } 59 | signed main(){ 60 | IOS; 61 | #ifdef LOCAL 62 | freopen("input.txt", "r" , stdin); 63 | freopen("output.txt", "w", stdout); 64 | #endif 65 | int t=1; 66 | //cin>>t; 67 | while(t--){ 68 | solve(); 69 | //cout<<'\n'; 70 | } 71 | #ifdef LOCAL 72 | clock_t tStart = clock(); 73 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | int dp[1000005]; 46 | void solve(){ 47 | int n; see(n); 48 | dp[0]=0; 49 | rep(i,1,n+1){ 50 | set s; 51 | for (auto j: to_string(i)){ 52 | s.insert(j-'0'); 53 | } 54 | dp[i]=inf; 55 | for (auto j: s){ 56 | dp[i] = min(dp[i],dp[i-j]+1); 57 | } 58 | } 59 | put(dp[n]); 60 | } 61 | signed main(){ 62 | IOS; 63 | #ifdef LOCAL 64 | freopen("input.txt", "r" , stdin); 65 | freopen("output.txt", "w", stdout); 66 | #endif 67 | int t=1; 68 | //cin>>t; 69 | while(t--){ 70 | solve(); 71 | //cout<<'\n'; 72 | } 73 | #ifdef LOCAL 74 | clock_t tStart = clock(); 75 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | int dp[1005][1005]; 46 | void solve(){ 47 | int n; see(n); 48 | rep(i,1,n+1){ 49 | rep(j,1,n+1){ 50 | char x; see(x); 51 | if (x=='*')dp[i][j]=0; 52 | else if (i*j==1) dp[i][j]=1; 53 | else dp[i][j] = (dp[i-1][j]+dp[i][j-1])%md; 54 | } 55 | } 56 | put(dp[n][n]); 57 | } 58 | signed main(){ 59 | IOS; 60 | #ifdef LOCAL 61 | freopen("input.txt", "r" , stdin); 62 | freopen("output.txt", "w", stdout); 63 | #endif 64 | int t=1; 65 | //cin>>t; 66 | while(t--){ 67 | solve(); 68 | //cout<<'\n'; 69 | } 70 | #ifdef LOCAL 71 | clock_t tStart = clock(); 72 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | int dp[5005][5005]; 46 | void solve(){ 47 | string a,b; see(a,b); 48 | int n = a.sz, m = b.sz; 49 | rep(i,1,m+1) dp[0][i]=i; 50 | rep(i,1,n+1) dp[i][0]=i; 51 | rep(i,1,n+1){ 52 | rep(j,1,m+1){ 53 | int c = (a[i-1]!=b[j-1]); 54 | dp[i][j] = min({dp[i][j-1]+1, dp[i-1][j]+1, dp[i-1][j-1] + c}); 55 | } 56 | } 57 | put(dp[n][m]); 58 | } 59 | signed main(){ 60 | IOS; 61 | #ifdef LOCAL 62 | freopen("input.txt", "r" , stdin); 63 | freopen("output.txt", "w", stdout); 64 | #endif 65 | int t=1; 66 | //cin>>t; 67 | while(t--){ 68 | solve(); 69 | //cout<<'\n'; 70 | } 71 | #ifdef LOCAL 72 | clock_t tStart = clock(); 73 | cerr< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int n,x,y; cin>>n>>x>>y; 20 | int a[n]; 21 | for (int i = 0; i < n; i++) 22 | cin>>a[i]; 23 | int pre[n+1] = {0}; 24 | for (int i = 1; i <= n; i++) 25 | pre[i] = pre[i-1] + a[i-1]; 26 | int s = 0, len = x; 27 | set> st; 28 | for (int i = 0; i < x; i++) 29 | s += a[i]; 30 | st.insert({pre[1], 0}); 31 | int mx = s; 32 | for (int i = x; i < n; i++) { 33 | int z = pre[i+1] - pre[i+1-x]; 34 | if (len == y) { 35 | auto it = st.begin(); 36 | s = max(z, s + a[i] - (it->first - pre[i-len])); 37 | if (s == z) len = x, st.clear(); 38 | else { 39 | for (int k = i-y; k <= it->second; k++) 40 | st.erase({pre[k+1], k}); 41 | len = i - it->second; 42 | } 43 | st.insert({pre[i-x+2], i-x+1}); 44 | } 45 | else { 46 | s = max(z, s + a[i]); 47 | if (s == z) len = x, st.clear(); 48 | else len++; 49 | st.insert({pre[i-x+2], i-x+1}); 50 | } 51 | mx = max(mx, s); 52 | } 53 | cout< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | void solve(){ 46 | int n; see(n); 47 | vii v; 48 | rep(i,1,n+1){ 49 | int x; see(x); 50 | int ans=0; 51 | while(v.sz){ 52 | if (v.back().F>=x) v.pop_back(); 53 | else {ans =v.back().S;break;} 54 | } 55 | put(ans);v.pb({x,i}); 56 | } 57 | } 58 | signed main(){ 59 | IOS; 60 | #ifdef LOCAL 61 | freopen("input.txt", "r" , stdin); 62 | freopen("output.txt", "w", stdout); 63 | #endif 64 | int t=1; 65 | //cin>>t; 66 | while(t--){ 67 | solve(); 68 | //cout<<'\n'; 69 | } 70 | #ifdef LOCAL 71 | clock_t tStart = clock(); 72 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define tiii tuple 27 | #define vi vector 28 | #define vii vector 29 | #define vc vector 30 | #define L cout<<'\n'; 31 | #define E cerr<<'\n'; 32 | #define all(x) x.begin(),x.end() 33 | #define rep(i,a,b) for (int i=a; ib; --i) 35 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 36 | #define setpr(x) cout<>a[i];} 39 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 40 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 41 | const ll inf = 1LL<<62; 42 | const ld ep = 0.0000001; 43 | const ld pi = acos(-1.0); 44 | const ll md = 1000000007; 45 | 46 | void solve(){ 47 | int n,q; see(n,q); 48 | int a[n+1]={0}; 49 | int pre[n+1]={0}; 50 | rep(i,1,n+1){ 51 | see(a[i]); 52 | pre[i] = pre[i-1]+a[i]; 53 | } 54 | while(q--){ 55 | int x,y; see(x,y); 56 | putl(pre[y] - pre[x-1]); 57 | } 58 | } 59 | signed main(){ 60 | IOS; 61 | #ifdef LOCAL 62 | freopen("input.txt", "r" , stdin); 63 | freopen("output.txt", "w", stdout); 64 | #endif 65 | int t=1; 66 | //cin>>t; 67 | while(t--){ 68 | solve(); 69 | //cout<<'\n'; 70 | } 71 | #ifdef LOCAL 72 | clock_t tStart = clock(); 73 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define tiii tuple 27 | #define vi vector 28 | #define vii vector 29 | #define vc vector 30 | #define L cout<<'\n'; 31 | #define E cerr<<'\n'; 32 | #define all(x) x.begin(),x.end() 33 | #define rep(i,a,b) for (int i=a; ib; --i) 35 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 36 | #define setpr(x) cout<>a[i];} 39 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 40 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 41 | const ll inf = 1LL<<62; 42 | const ld ep = 0.0000001; 43 | const ld pi = acos(-1.0); 44 | const ll md = 1000000007; 45 | 46 | int x[200005]; 47 | void solve(){ 48 | int n,m; see(n,m); 49 | x[0]=0; 50 | rep(i,1,n+1){ 51 | int y; see(y); 52 | x[i] = y^x[i-1]; 53 | } 54 | while(m--){ 55 | int a,b; see(a,b); 56 | putl(x[b]^x[a-1]); 57 | } 58 | } 59 | signed main(){ 60 | IOS; 61 | #ifdef LOCAL 62 | freopen("input.txt", "r" , stdin); 63 | freopen("output.txt", "w", stdout); 64 | #endif 65 | int t=1; 66 | //cin>>t; 67 | while(t--){ 68 | solve(); 69 | //cout<<'\n'; 70 | } 71 | #ifdef LOCAL 72 | clock_t tStart = clock(); 73 | cerr< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int n, k; cin>>n>>k; 20 | int a[n]; 21 | for (int i = 0; i < n; i++) 22 | cin>>a[i]; 23 | pair dp[1<>i&1){ 29 | auto [c, w] = dp[s^(1< k) { 31 | c++; 32 | w = min(a[i], w); 33 | } 34 | else 35 | w += a[i]; 36 | dp[s] = min(dp[s], {c, w}); 37 | } 38 | } 39 | // cerr< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1<<21; 13 | int freq[mxN]; 14 | int dp1[mxN][21], dp2[mxN][21]; 15 | signed main(){ 16 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 17 | #ifdef LOCAL 18 | freopen("input.txt", "r" , stdin); 19 | freopen("output.txt", "w", stdout); 20 | #endif 21 | 22 | int n; cin>>n; 23 | int a[n]; 24 | for (int i = 0; i < n; i++) { 25 | int x; cin>>x; 26 | a[i] = x; 27 | freq[x]++; 28 | } 29 | for (int i = 1; i < mxN>>1; i++) { 30 | dp1[i][0] = freq[i]; 31 | if (i&1) 32 | dp1[i][0] += freq[i^1]; 33 | for (int k = 1; k < 21; k++) { 34 | dp1[i][k] = dp1[i][k-1]; 35 | if (i>>k&1) 36 | dp1[i][k] += dp1[i^1<>1; i > 0; i--) { 40 | dp2[i][0] = freq[i]; 41 | if (i&1^1) 42 | dp2[i][0] += freq[i^1]; 43 | for (int k = 1; k < 21; k++) { 44 | dp2[i][k] = dp2[i][k-1]; 45 | if (i>>k&1^1) 46 | dp2[i][k] += dp2[i^1<>1) - 1)][20]< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int N = 30; 13 | int trie[200005*N][2], ct = 0; 14 | void insert(int x) { 15 | int node = 0; 16 | for (int i = N; i >= 0; i--) { 17 | int y = x>>i&1; 18 | if (!trie[node][y]) trie[node][y] = ++ct; 19 | node = trie[node][y]; 20 | } 21 | } 22 | int search(int x) { 23 | int ans = 0, node = 0; 24 | for (int i = N; i>=0; i--) { 25 | int y = x>>i&1; 26 | if (trie[node][y^1]) { 27 | node = trie[node][y^1]; 28 | ans += (1<>n; 43 | int xr = 0, mx = 0; 44 | insert(xr); 45 | for (int i = 0; i < n; i++) { 46 | int x; cin>>x; 47 | xr ^= x; 48 | insert(xr); 49 | mx = max(search(xr), mx); 50 | } 51 | cout< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | void solve(){ 46 | //METHOD: hashing 47 | int n,x; see(n,x); 48 | int i=0,j=1; 49 | int a[n+1]={0};seea(a,0,n); 50 | unordered_map mp; 51 | int s=0; mp[0]=1; 52 | int ans=0; 53 | rep(i,0,n){ 54 | s+=a[i]; 55 | if (mp.find(s-x)!=mp.end()) ans+=mp[s-x]; 56 | mp[s]++; 57 | } 58 | put(ans); 59 | 60 | } 61 | signed main(){ 62 | IOS; 63 | #ifdef LOCAL 64 | freopen("input.txt", "r" , stdin); 65 | freopen("output.txt", "w", stdout); 66 | #endif 67 | int t=1; 68 | //cin>>t; 69 | while(t--){ 70 | solve(); 71 | //cout<<'\n'; 72 | } 73 | #ifdef LOCAL 74 | clock_t tStart = clock(); 75 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | void solve(){ 46 | //METHOD: hashing 47 | int n,x; see(n,x); 48 | int i=0,j=1; 49 | int a[n+1]={0};seea(a,0,n); 50 | map mp; 51 | int s=0; mp[0]=1; 52 | int ans=0; 53 | rep(i,0,n){ 54 | s+=a[i]; 55 | if (mp.find(s-x)!=mp.end()) ans+=mp[s-x]; 56 | mp[s]++; 57 | } 58 | put(ans); 59 | 60 | } 61 | signed main(){ 62 | IOS; 63 | #ifdef LOCAL 64 | freopen("input.txt", "r" , stdin); 65 | freopen("output.txt", "w", stdout); 66 | #endif 67 | int t=1; 68 | //cin>>t; 69 | while(t--){ 70 | solve(); 71 | //cout<<'\n'; 72 | } 73 | #ifdef LOCAL 74 | clock_t tStart = clock(); 75 | cerr< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | int dp[1000006][25]; 13 | signed main(){ 14 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 15 | #ifdef LOCAL 16 | freopen("input.txt", "r" , stdin); 17 | freopen("output.txt", "w", stdout); 18 | #endif 19 | 20 | int n, m; cin>>n>>m; 21 | for (int i = 0; i < n; i++) { 22 | int x, y; cin>>x>>y; 23 | dp[y][0] = max(dp[y][0], x); 24 | } 25 | for (int i = 1; i <= 1000000; i++) 26 | dp[i][0] = max(dp[i][0], dp[i-1][0]); 27 | 28 | for (int k = 1; k <= 20; k++) 29 | for (int i = 1; i <= 1000000; i++) 30 | dp[i][k] = dp[dp[i][k-1]][k-1]; 31 | 32 | while(m--) { 33 | int x,y; cin>>x>>y; 34 | int ans = 0; 35 | while(y>0) { 36 | int z = 0; 37 | for (int i = 0; i <= 20; i++) { 38 | if (dp[y][i] < x) { 39 | z = i; 40 | break; 41 | } 42 | } 43 | 44 | if (z == 0) 45 | break; 46 | ans += (1<<(z-1)); 47 | y = dp[y][z-1]; 48 | } 49 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 200005; 13 | int len[mxN], par[mxN]; 14 | void init() { 15 | for (int i = 1; i < mxN; i++) 16 | len[i] = 1, par[i] = i; 17 | } 18 | int find(int x) { 19 | int s = x; 20 | while(par[s] != s) 21 | s = par[s]; 22 | while(par[x] != x) { 23 | int k = x; 24 | x = par[x]; 25 | par[k] = s; 26 | } 27 | return s; 28 | } 29 | void join(int x, int y) { 30 | int s1 = find(x), s2 = find(y); 31 | if (s1 == s2) 32 | return; 33 | if (len[s1] > len[s2]) 34 | swap(s1, s2); 35 | par[s1] = s2; 36 | len[s2] += len[s1]; 37 | } 38 | signed main(){ 39 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 40 | #ifdef LOCAL 41 | freopen("input.txt", "r" , stdin); 42 | freopen("output.txt", "w", stdout); 43 | #endif 44 | 45 | int n, m, k; cin>>n>>m>>k; 46 | set> e; 47 | init(); 48 | for (int i = 0; i < m; i++) { 49 | int x, y; cin>>x>>y; 50 | if (x > y) swap(x, y); 51 | e.insert({x, y}); 52 | } 53 | vector> q; 54 | for (int i = 0; i < m; i++) { 55 | int x,y; cin>>x>>y; 56 | if (x > y) swap(x, y); 57 | e.erase({x, y}); 58 | q.push_back({x, y}); 59 | } 60 | int comp = n; 61 | for (auto [x, y]: e) { 62 | if (find(x) != find(y)) { 63 | comp--; 64 | join(x, y); 65 | } 66 | } 67 | int ans[k] = {0}; 68 | for (int i = k-1; i >= 0; i--) { 69 | ans[i] = comp; 70 | auto [x, y] = q[i]; 71 | if (find(x) != find(y)) { 72 | comp--; 73 | join(x, y); 74 | } 75 | } 76 | for (int i = 0; i < k; i++) 77 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int n; cin>>n; 20 | int a[n+1]; 21 | set> st; 22 | int sm = 0; 23 | for (int i = 1; i <= n; i++) { 24 | cin>>a[i]; 25 | sm += a[i]; 26 | if (a[i]) 27 | st.insert({a[i], i}); 28 | } 29 | sm; 30 | vector> ans; 31 | while(st.size()>=2) { 32 | auto [x1, i1] = *st.begin(); st.erase({x1, i1}); 33 | vector> s; 34 | while(x1>0 && st.size()) { 35 | auto [x2, i2] = *st.rbegin(); st.erase({x2, i2}); 36 | ans.push_back({i1, i2}); 37 | x1--, x2--; 38 | s.push_back({x2, i2}); 39 | } 40 | for (auto [i, j]: s) { 41 | if (i>0) st.insert({i, j}); 42 | } 43 | } 44 | if (2*ans.size() == sm) { 45 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | map,int> mp; 13 | int idx = 0; 14 | int dfs(int s, int p, vector adj[]) { 15 | vector v; 16 | for (auto i: adj[s]) { 17 | if (i != p) 18 | v.push_back(dfs(i, s, adj)); 19 | } 20 | sort(v.begin(), v.end()); 21 | if (!mp.count(v)) mp[v] = idx++; 22 | return mp[v]; 23 | } 24 | signed main(){ 25 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 26 | #ifdef LOCAL 27 | freopen("input.txt", "r" , stdin); 28 | freopen("output.txt", "w", stdout); 29 | #endif 30 | 31 | int t; cin>>t; 32 | while(t--) { 33 | int n; cin>>n; 34 | vector adj1[n+1], adj2[n+1]; 35 | for (int i = 1; i < n; i++) { 36 | int x,y; cin>>x>>y; 37 | adj1[x].push_back(y); 38 | adj1[y].push_back(x); 39 | } 40 | for (int i = 1; i < n; i++) { 41 | int x,y; cin>>x>>y; 42 | adj2[x].push_back(y); 43 | adj2[y].push_back(x); 44 | } 45 | int s1 = dfs(1, -1, adj1); 46 | int s2 = dfs(1, -1, adj2); 47 | if (s1 == s2) 48 | cout<<"YES"; 49 | else cout<<"NO"; 50 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | vector center(int n, vector adj[]) { 13 | int deg[n+1] = {0}; 14 | vector v; 15 | for (int i = 1; i <= n; i++) { 16 | deg[i] = adj[i].size(); 17 | if (deg[i] == 1) 18 | v.push_back(i), deg[i]--; 19 | } 20 | int m = v.size(); 21 | while(m < n) { 22 | vector vv; 23 | for (auto i: v) { 24 | for (auto j: adj[i]) { 25 | deg[j]--; 26 | if (deg[j] == 1) 27 | vv.push_back(j); 28 | } 29 | } 30 | m += vv.size(); 31 | v = vv; 32 | } 33 | return v; 34 | } 35 | map, int> mp; 36 | int idx = 0; 37 | 38 | int dfs(int s, int p, vector adj[]) { 39 | vector v; 40 | for (auto i: adj[s]) { 41 | if (i != p) 42 | v.push_back(dfs(i, s, adj)); 43 | } 44 | sort(v.begin(), v.end()); 45 | if (!mp.count(v)) mp[v] = idx++; 46 | return mp[v]; 47 | } 48 | signed main(){ 49 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 50 | #ifdef LOCAL 51 | freopen("input.txt", "r" , stdin); 52 | freopen("output.txt", "w", stdout); 53 | #endif 54 | 55 | int t; cin>>t; 56 | while(t--) { 57 | int n; cin>>n; 58 | vector adj1[n+1], adj2[n+1]; 59 | for (int i = 1; i < n; i++) { 60 | int x,y; cin>>x>>y; 61 | adj1[x].push_back(y); 62 | adj1[y].push_back(x); 63 | } 64 | for (int i = 1; i < n; i++) { 65 | int x,y; cin>>x>>y; 66 | adj2[x].push_back(y); 67 | adj2[y].push_back(x); 68 | } 69 | vector v1 = center(n, adj1), v2 = center(n, adj2); 70 | int s1 = dfs(v1[0], -1, adj1); 71 | int f = 0; 72 | for (auto s: v2) { 73 | int s2 = dfs(s, -1, adj2); 74 | if (s1 == s2) 75 | f = 1; 76 | } 77 | if (f) cout<<"YES"; 78 | else cout<<"NO"; 79 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | vector pre, in; 13 | int a[100005]; 14 | int x = 0, n; 15 | void post(int l = 0, int h = n-1) { 16 | if (l > h) { 17 | x--; 18 | return; 19 | } 20 | int i = a[pre[x]]; 21 | ++x; 22 | post(l, i-1); 23 | ++x; 24 | post(i+1, h); 25 | cout<>n; 35 | for (int i = 0; i < n; i++) { 36 | int x; cin>>x; 37 | pre.push_back(x); 38 | } 39 | for (int i = 0; i < n; i++) { 40 | int x; cin>>x; 41 | in.push_back(x); 42 | a[x] = i; 43 | } 44 | post(); 45 | } 46 | -------------------------------------------------------------------------------- /src/1704 - Network Renovation.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Network Renovation 3 | Problem Link: https://cses.fi/problemset/task/1704 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | vector adj[100005]; 13 | vector v; 14 | void dfs(int s, int p) { 15 | for (auto i : adj[s]) { 16 | if (i != p) 17 | dfs(i, s); 18 | } 19 | if (adj[s].size() == 1) 20 | v.push_back(s); 21 | } 22 | signed main(){ 23 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 24 | #ifdef LOCAL 25 | freopen("input.txt", "r" , stdin); 26 | freopen("output.txt", "w", stdout); 27 | #endif 28 | 29 | int n; cin>>n; 30 | for (int i = 0; i < n-1; i++) { 31 | int x,y; cin>>x>>y; 32 | adj[x].push_back(y); 33 | adj[y].push_back(x); 34 | } 35 | dfs(1, 0); 36 | int k = v.size(); 37 | if (k&1) 38 | v.push_back(v[0]), k++; 39 | cout<< k/2< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e5+5; 13 | int c = 0; 14 | vector adj[mxN]; 15 | bool vis[mxN]; 16 | void dfs(int s){ 17 | if (vis[s]) return; 18 | vis[s]=1; c++; 19 | for (auto i: adj[s]) dfs(i); 20 | } 21 | int dp[mxN]; 22 | map mp; 23 | signed main(){ 24 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 25 | #ifdef LOCAL 26 | freopen("input.txt", "r" , stdin); 27 | freopen("output.txt", "w", stdout); 28 | #endif 29 | 30 | int n, m; cin>>n>>m; 31 | for (int i = 0; i < m; i++) { 32 | int x,y; cin>>x>>y; 33 | adj[x].push_back(y); 34 | adj[y].push_back(x); 35 | } 36 | 37 | for (int i = 0; i < n; i++) { 38 | if (!vis[i+1]) { 39 | c = 0; 40 | dfs(i+1); 41 | mp[c]++; 42 | } 43 | } 44 | vector v; 45 | for (auto [i, c]: mp) { 46 | int x = 0; 47 | while(1<= 1; j--) { 59 | if (j >= v[i]) { 60 | dp[j] = max(dp[j-v[i]], dp[j]); 61 | } 62 | } 63 | } 64 | for (int i = 1; i <= n; i++) 65 | cout< 7 | using namespace std; 8 | 9 | // #define int long long 10 | #define endl '\n' 11 | 12 | vector adj[2505]; 13 | int ct = 0; 14 | int ans = 5000; 15 | int vis[2505]; 16 | void bfs(int x, int t){ 17 | queue q; 18 | vis[x]=1; 19 | q.push(x); 20 | while(!q.empty()){ 21 | int s = q.front(); q.pop(); 22 | for(auto i: adj[s]){ 23 | if (x == s && i == t) continue; 24 | if (vis[i]) continue; 25 | vis[i]=vis[s]+1; 26 | if (i == t) return; 27 | q.push(i); 28 | } 29 | } 30 | } 31 | signed main(){ 32 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 33 | #ifdef LOCAL 34 | freopen("input.txt", "r" , stdin); 35 | freopen("output.txt", "w", stdout); 36 | #endif 37 | 38 | int n,m; cin>>n>>m; 39 | vector> e; 40 | for (int i = 0; i < m; i++) { 41 | int u,v; cin>>u>>v; 42 | adj[u].push_back(v); 43 | adj[v].push_back(u); 44 | e.push_back({u, v}); 45 | } 46 | for (auto [i, j]: e) { 47 | memset(vis, 0, sizeof vis); 48 | bfs(i, j); 49 | if (vis[j]) ans = min(ans, vis[j]); 50 | } 51 | if (ans < 5000) cout< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | int exp(int x, unsigned int y, int p){ 45 | int res=1; x=x%p; 46 | while(y>0){ 47 | if (y&1) res= (res*x)%p; y=y>>1; x=(x*x)%p; 48 | } 49 | return res; 50 | } 51 | void solve(){ 52 | int a,b,c; see(a,b,c); 53 | int r = exp(b,c,md-1); 54 | put(exp(a,r,md)); 55 | } 56 | signed main(){ 57 | IOS; 58 | #ifdef LOCAL 59 | freopen("input.txt", "r" , stdin); 60 | freopen("output.txt", "w", stdout); 61 | #endif 62 | int t=1; 63 | cin>>t; 64 | while(t--){ 65 | solve(); 66 | cout<<'\n'; 67 | } 68 | #ifdef LOCAL 69 | clock_t tStart = clock(); 70 | cerr< 7 | using namespace std; 8 | template 9 | void see(T&... args) { ((cin >> args), ...);} 10 | template 11 | void put(T&&... args) { ((cout << args << " "), ...);} 12 | template 13 | void putl(T&&... args) { ((cout << args << " "), ...); cout<<'\n';} 14 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 15 | void err(istream_iterator it) {} 16 | template 17 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 18 | #define int long long 19 | #define pb push_back 20 | #define F first 21 | #define S second 22 | #define ll long long 23 | #define ull unsigned long long 24 | #define ld long double 25 | #define pii pair 26 | #define vi vector 27 | #define vii vector 28 | #define vc vector 29 | #define L cout<<'\n'; 30 | #define E cerr<<'\n'; 31 | #define all(x) x.begin(),x.end() 32 | #define rep(i,a,b) for (int i=a; ib; --i) 34 | #define IOS ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #define setpr(x) cout<>a[i];} 38 | #define seev(v,n) for(int i=0;i>x; v.push_back(x);} 39 | #define sees(s,n) for(int i=0;i>x; s.insert(x);} 40 | const ll inf = INT_MAX; 41 | const ld ep = 0.0000001; 42 | const ld pi = acos(-1.0); 43 | const ll md = 1000000007; 44 | 45 | pii fib(int n, int md){ 46 | if (n==0){ 47 | return {0,1}; 48 | } 49 | auto p = fib(n>>1,md); 50 | int c = p.F*(2*p.S - p.F + md)%md; 51 | int d = (p.F*p.F%md + p.S*p.S%md)%md; 52 | if (n&1) return {d,(c+d)%md}; 53 | else return {c,d}; 54 | } 55 | void solve(){ 56 | int n; see(n); 57 | put(fib(n,md).F); 58 | } 59 | signed main(){ 60 | IOS; 61 | #ifdef LOCAL 62 | freopen("input.txt", "r" , stdin); 63 | freopen("output.txt", "w", stdout); 64 | #endif 65 | int t=1; 66 | //cin>>t; 67 | while(t--){ 68 | solve(); 69 | //cout<<'\n'; 70 | } 71 | #ifdef LOCAL 72 | clock_t tStart = clock(); 73 | cerr< 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define pb push_back 17 | #define F first 18 | #define S second 19 | #define vi vector 20 | #define vvi vector 21 | const int inf = 1LL<<62; 22 | const int md = 1000000007; 23 | 24 | vvi mul(vvi a, vvi b) { 25 | vvi c(a.size(), vi(b[0].size())); 26 | for (int i = 0; i < a.size(); i++) 27 | for (int j = 0; j < b[0].size(); j++) 28 | for ( int k = 0; k < a[0].size(); k++) 29 | (c[i][j] += a[i][k]*b[k][j]%md)%=md; 30 | return c; 31 | } 32 | 33 | 34 | vvi exp( vvi x, int y) { 35 | vvi r(x.size(), vi(x.size())); 36 | for ( int i = 0; i < x.size(); i++) r[i][i] = 1; 37 | while (y>0){ 38 | if (y&1) { 39 | r = mul(r,x); 40 | } 41 | y=y>>1; 42 | x = mul(x,x); 43 | } 44 | return r; 45 | } 46 | void solve(){ 47 | //considering multiple edges 48 | int n,m, k; cin>>n>>m>>k; 49 | vvi adj(n,vi(n)); 50 | for (int i = 0; i< m; i++) { 51 | int x,y; cin>>x>>y; 52 | x--; y--; 53 | adj[x][y]++; 54 | } 55 | adj = exp(adj,k); 56 | cout<>t; 66 | for (int i = 1; i <= t; i++) { 67 | solve(); 68 | cout<<'\n'; 69 | } 70 | } -------------------------------------------------------------------------------- /src/1724 - Graph Paths II.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Graph Paths II 3 | Problem Link: https://cses.fi/problemset/task/1724 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define pb push_back 17 | #define F first 18 | #define S second 19 | #define vi vector 20 | #define vvi vector 21 | const int inf = 1LL<<60; 22 | const int md = 1000000007; 23 | 24 | vvi mul(vvi a, vvi b) { 25 | vvi c(a.size(), vi(b[0].size())); 26 | int n = a.size(); 27 | for (int i = 0; i < n; i++) 28 | for (int j = 0; j< n; j++) c[i][j] = inf; 29 | for (int i = 0; i < a.size(); i++) 30 | for (int j = 0; j < b[0].size(); j++) 31 | for ( int k = 0; k < a[0].size(); k++) 32 | c[i][j] = min(c[i][j], a[i][k]+b[k][j]); 33 | return c; 34 | } 35 | 36 | 37 | vvi exp( vvi x, int y) { 38 | vvi r(x.size(), vi(x.size())); 39 | int f = 0; 40 | while (y>0){ 41 | if (y&1) { 42 | if (f) r = mul(r,x); 43 | else r = x, f =1; 44 | } 45 | y=y>>1; 46 | x = mul(x,x); 47 | } 48 | return r; 49 | } 50 | void solve(){ 51 | //considering multiple edges 52 | int n,m, k; cin>>n>>m>>k; 53 | vvi adj(n,vi(n)); 54 | for (int i = 0; i < n; i++) 55 | for (int j = 0; j< n; j++) adj[i][j] = inf; 56 | for (int i = 0; i< m; i++) { 57 | int x,y,c; cin>>x>>y>>c; 58 | x--; y--; 59 | adj[x][y] = min(adj[x][y], c); 60 | } 61 | adj = exp(adj,k); 62 | if (adj[0][n-1] < inf) cout<>t; 73 | for (int i = 1; i <= t; i++) { 74 | solve(); 75 | cout<<'\n'; 76 | } 77 | } -------------------------------------------------------------------------------- /src/1725 - Dice Probability.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Dice Probability 3 | Problem Link: https://cses.fi/problemset/task/1725 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define pb push_back 17 | #define F first 18 | #define S second 19 | 20 | const int inf = 1LL<<62; 21 | const int md = 1000000007; 22 | 23 | void solve(){ 24 | int n,a,b; cin>>n>>a>>b; 25 | double dp[605][105]={0}; 26 | dp[0][0] = 1.0; 27 | for (int j = 1; j<=n; j++) { 28 | for (int i = 1; i < 601; i++) { 29 | for (int k = 1; k < 7; k++) { 30 | if (i-k>=0) dp[i][j] += dp[i-k][j-1]*(1.0/6); 31 | } 32 | } 33 | } 34 | double ans = 0; 35 | for (int i = a; i <=b; i++) ans+= dp[i][n]; 36 | cout<>t; 47 | for (int i = 1; i <= t; i++) { 48 | solve(); 49 | cout<<'\n'; 50 | } 51 | } -------------------------------------------------------------------------------- /src/1726 - Moving Robots.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Moving Robots 3 | Problem Link: https://cses.fi/problemset/task/1726 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define pb push_back 17 | #define F first 18 | #define S second 19 | 20 | const int inf = 1LL<<62; 21 | const int md = 1000000007; 22 | 23 | int dir(int x, int y) { 24 | int c = 0; 25 | if ( x + 1 < 8) c++; 26 | if ( y + 1 < 8) c++; 27 | if ( x - 1 >= 0 ) c++; 28 | if ( y - 1 >=0) c++; 29 | return c; 30 | } 31 | 32 | long double dp[65][65][105] = {0}; 33 | void solve(){ 34 | for (int i = 0; i < 64; i++) dp[i][i][0] = 1; 35 | int k; cin>>k; 36 | for (int i = 1; i <=k; i++) { 37 | for ( int x= 0; x <64; x++) { 38 | for (int y = 0; y < 64; y++) { 39 | int a = x/8, b = x%8; 40 | long double p = 0; 41 | if (a+1 < 8 ) { 42 | p += 1.0/dir(a+1,b)*dp[a*8 + 8 + b][y][i-1]; 43 | } 44 | if (b+1 < 8 ) { 45 | p += 1.0/dir(a,b+1)*dp[a*8 + b + 1][y][i-1]; 46 | } 47 | if ( a - 1 >= 0) { 48 | p += 1.0/dir(a-1, b)*dp[a*8 - 8 +b][y][i-1]; 49 | } 50 | if ( b - 1 >=0) { 51 | p += 1.0/dir(a, b- 1)*dp[a*8 + b-1][y][i-1]; 52 | } 53 | dp[x][y][i] = p; 54 | } 55 | } 56 | } 57 | long double ans = 0; 58 | for (int x = 0; x < 64; x++){ 59 | long double t = 1; 60 | for (int y = 0; y < 64; y++) { 61 | t*=(1 - dp[x][y][k]); 62 | } 63 | ans += t; 64 | } 65 | cout<>t; 76 | for (int i = 1; i <= t; i++) { 77 | solve(); 78 | cout<<'\n'; 79 | } 80 | } -------------------------------------------------------------------------------- /src/1727 - Candy Lottery.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Problem Name: Candy Lottery 3 | Problem Link: https://cses.fi/problemset/task/1727 4 | Author: Sachin Srivastava (mrsac7) 5 | ''' 6 | n, k = list(map(int, input().split())) 7 | s = 0 8 | d = k**n 9 | for i in range(k): 10 | s += i**n 11 | print('%.6f' %(k - s/d)) 12 | -------------------------------------------------------------------------------- /src/1728 - Inversion Probability.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Inversion Probability 3 | Problem Link: https://cses.fi/problemset/task/1728 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define pb push_back 17 | #define F first 18 | #define S second 19 | 20 | const int inf = 1LL<<62; 21 | const int md = 1000000007; 22 | 23 | void solve(){ 24 | int n, r[105]; 25 | long double p[105][105] = {0}; 26 | cin>>n; 27 | for (int i = 0; i < n; i++) { 28 | cin>>r[i]; 29 | } 30 | long double ans = 0; 31 | for (int i = 0; i < n; i++) { 32 | for ( int j = i + 1; j < n; j++) { 33 | for (int k = 1; k <= r[i]; k++) { 34 | p[i][j] += 1.0/r[i]*(((k - 1) >= r[j])?1.0:(k-1.0)/r[j]); 35 | } 36 | ans += p[i][j]; 37 | } 38 | } 39 | cout<>t; 50 | for (int i = 1; i <= t; i++) { 51 | solve(); 52 | cout<<'\n'; 53 | } 54 | } -------------------------------------------------------------------------------- /src/1729 - Stick Game.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Stick Game 3 | Problem Link: https://cses.fi/problemset/task/1729 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define pb push_back 17 | #define F first 18 | #define S second 19 | 20 | const int inf = 1LL<<62; 21 | const int md = 1000000007; 22 | 23 | void solve(){ 24 | int n,k; cin>>n>>k; 25 | int dp[n+1] = {0}; 26 | dp[0] = 0; 27 | vector p; 28 | for (int i = 0; i < k ; i++) { 29 | int x; cin>>x; 30 | p.push_back(x); 31 | } 32 | for (int i = 1; i <= n; i++) { 33 | dp[i] = 0; 34 | for (auto j: p) { 35 | if (i - j >= 0) { 36 | if (dp[i - j] == 0) dp[i]=1; 37 | } 38 | } 39 | if (dp[i]) cout<<'W'; 40 | else cout<<'L'; 41 | } 42 | } 43 | signed main(){ 44 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 45 | #ifdef LOCAL 46 | freopen("input.txt", "r" , stdin); 47 | freopen("output.txt", "w", stdout); 48 | #endif 49 | int t=1; 50 | //cin>>t; 51 | for (int i = 1; i <= t; i++) { 52 | solve(); 53 | cout<<'\n'; 54 | } 55 | } -------------------------------------------------------------------------------- /src/1730 - Nim Game I.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Nim Game I 3 | Problem Link: https://cses.fi/problemset/task/1730 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define pb push_back 17 | #define F first 18 | #define S second 19 | 20 | const int inf = 1LL<<62; 21 | const int md = 1000000007; 22 | 23 | void solve(){ 24 | int n; cin>>n; 25 | int x = 0; 26 | for (int i = 0; i < n; i++) { 27 | int a; cin>>a; 28 | x^=a; 29 | } 30 | if (x) cout<<"first"; 31 | else cout<<"second"; 32 | } 33 | signed main(){ 34 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 35 | #ifdef LOCAL 36 | freopen("input.txt", "r" , stdin); 37 | freopen("output.txt", "w", stdout); 38 | #endif 39 | int t=1; 40 | cin>>t; 41 | for (int i = 1; i <= t; i++) { 42 | solve(); 43 | cout<<'\n'; 44 | } 45 | } -------------------------------------------------------------------------------- /src/1731 - Word Combinations.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Word Combinations 3 | Problem Link: https://cses.fi/problemset/task/1731 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | #define int long long 16 | #define F first 17 | #define S second 18 | 19 | const long long inf = 1LL<<62; 20 | const int md = 1000000007; 21 | 22 | int trie[1000005][26]; 23 | bool stop[1000005]; 24 | int dp[5005]; 25 | int ct = 0; 26 | void insert(string s) { 27 | int node = 0; 28 | for (int i = 0; i < s.size(); i++) { 29 | if (!trie[node][s[i]-'a']) trie[node][s[i]-'a'] = ++ct; 30 | node = trie[node][s[i]-'a']; 31 | } 32 | stop[node] = 1; 33 | } 34 | string s; 35 | int search(int x) { 36 | int node = 0, ans = 0; 37 | for (int i = x; i < s.size(); i++) { 38 | if (!trie[node][s[i]-'a']) return ans; 39 | node = trie[node][s[i] - 'a']; 40 | if (stop[node]) { 41 | (ans += dp[i+1])%=md; 42 | } 43 | } 44 | return ans; 45 | } 46 | 47 | void solve(){ 48 | cin>>s; 49 | int k; cin>>k; 50 | while(k--) { 51 | string x; cin>>x; 52 | insert(x); 53 | } 54 | dp[s.size()] = 1; 55 | for (int i = s.size() - 1; i>=0; i--) { 56 | dp[i] = search(i); 57 | } 58 | cout<>t; 68 | for (int i = 1; i <= t; i++) { 69 | solve(); 70 | cout<<'\n'; 71 | } 72 | } -------------------------------------------------------------------------------- /src/1733 - Finding Periods.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Finding Periods 3 | Problem Link: https://cses.fi/problemset/task/1733 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | template 10 | #define error(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator _it(_ss); err(_it, args); } 11 | void err(istream_iterator it) {} 12 | template 13 | void err(istream_iterator it, T a, Args... args) {cerr << *it << "=" << a << ", "; err(++it, args...);} 14 | 15 | // #define int long long 16 | #define pb push_back 17 | #define F first 18 | #define S second 19 | 20 | // const int inf = 1LL<<62; 21 | const int md = 1000000007; 22 | 23 | void z(string s) { 24 | int n = s.size(); 25 | vector z(n,0); 26 | int x = 0, y = 0; 27 | for (int i = 1; i < n; i++) { 28 | z[i] = max(0,min(z[i-x], y-i+1)); 29 | while (i+z[i] < n && s[z[i]] == s[i+z[i]]) { 30 | x = i; y = i + z[i]; z[i]++; 31 | } 32 | if (z[i] + i == n) cout<>s; 38 | z(s); 39 | } 40 | signed main(){ 41 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 42 | #ifdef LOCAL 43 | freopen("input.txt", "r" , stdin); 44 | freopen("output.txt", "w", stdout); 45 | #endif 46 | int t=1; 47 | //cin>>t; 48 | for (int i = 1; i <= t; i++) { 49 | solve(); 50 | cout<<'\n'; 51 | } 52 | } -------------------------------------------------------------------------------- /src/1737 - Range Queries and Copies.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Range Queries and Copies 3 | Problem Link: https://cses.fi/problemset/task/1737 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | //persistent segment tree 13 | 14 | int cur = 1, n, q; 15 | vector ver; 16 | const int mxN = 2e5; 17 | struct node { 18 | int left, right, sum; 19 | } seg[mxN*40]; 20 | 21 | void update(int &root, int idx, int val, int l = 0, int h = n-1) { 22 | seg[cur].left = seg[root].left; 23 | seg[cur].right = seg[root].right; 24 | seg[cur].sum = seg[root].sum + val; 25 | root = cur; cur++; 26 | int mid = (l+h)/2; 27 | if (l == h) 28 | return; 29 | if (idx <= mid) 30 | update(seg[root].left, idx, val, l, mid); 31 | else 32 | update(seg[root].right, idx, val, mid+1, h); 33 | } 34 | 35 | int query(int root, int a, int b, int l = 0, int h = n-1) { 36 | if (a<=l && h<=b) 37 | return seg[root].sum; 38 | int mid = (l+h)/2; 39 | return (a<=mid?query(seg[root].left, a, b, l, mid):0) + 40 | (mid>n>>q; 50 | ver.push_back(0); 51 | for (int i = 0; i < n; i++) { 52 | int x; cin>>x; 53 | update(ver[0], i, x); 54 | } 55 | while(q--) { 56 | int ch; cin>>ch; 57 | if (ch == 1) { 58 | int k, a, x; cin>>k>>a>>x; 59 | k--, a--; 60 | update(ver[k], a, x - query(ver[k], a, a)); 61 | } 62 | else if (ch == 2) { 63 | int k, a, b; cin>>k>>a>>b; 64 | k--, a--, b--; 65 | cout<>k; 69 | ver.push_back(ver[k-1]); 70 | } 71 | } 72 | 73 | } 74 | -------------------------------------------------------------------------------- /src/1740 - Intersection Points.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Intersection Points 3 | Problem Link: https://cses.fi/problemset/task/1740 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 2000006; 13 | int y[100005]; 14 | pair ver[100005]; 15 | int bit[mxN] = {0}; 16 | void upd(int x, int v) { 17 | for (; x < mxN; x += (x&-x)) 18 | bit[x] += v; 19 | } 20 | 21 | int qry(int x) { 22 | int ans = 0; 23 | for (; x > 0; x -= (x&-x)) 24 | ans += bit[x]; 25 | return ans; 26 | } 27 | 28 | signed main(){ 29 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 30 | #ifdef LOCAL 31 | freopen("input.txt", "r" , stdin); 32 | freopen("output.txt", "w", stdout); 33 | #endif 34 | 35 | int n; cin>>n; 36 | vector> points; //x, 0/1/2, ind; 37 | for (int i = 0; i < n; i++) { 38 | int x1, y1, x2, y2; 39 | cin>>x1>>y1>>x2>>y2; 40 | if (x1 == x2) { 41 | points.push_back({x1, 1, i}); 42 | ver[i] = {y1, y2}; 43 | } 44 | else { 45 | points.push_back({x1, 0, i}); 46 | points.push_back({x2, 2, i}); 47 | y[i] = y1; 48 | } 49 | } 50 | sort(points.begin(), points.end()); 51 | int ans = 0; 52 | for (auto [x, e, i]: points) { 53 | if (e == 0) { 54 | int yc = y[i]; 55 | upd(yc+1e6+1, 1); 56 | } else if (e == 2) { 57 | int yc = y[i]; 58 | upd(yc+1e6+1, -1); 59 | } else { 60 | auto [y1, y2] = ver[i]; 61 | ans += qry(y2+1e6+1) - qry(y1+1e6); 62 | } 63 | } 64 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | string s; cin>>s; 20 | int n = s.size(); 21 | sort(s.begin(), s.end()); 22 | set str; 23 | int fq[27] = {0}; 24 | for (auto i: s) { 25 | fq[i-'A']++; 26 | str.insert(i); 27 | } 28 | 29 | auto it = max_element(fq, fq+27); 30 | if (2**it - n > 1) return cout<<-1, 0; 31 | 32 | string ans; 33 | char prev = 26+'A'; 34 | while(2**it - n < 1) { 35 | char x = *str.begin(); 36 | str.erase(x); 37 | ans += x; fq[x-'A']--; 38 | if (fq[prev-'A']) 39 | str.insert(prev); 40 | prev = x; 41 | it = max_element(fq, fq+27); 42 | n--; 43 | } 44 | if (*it) { 45 | string aux; char x = it-fq+'A'; 46 | for (int i = 0; i < 26; i++) if (x-'A' != i) 47 | for (int j = 0; j < fq[i]; j++) 48 | aux += i+'A'; 49 | ans += x; 50 | for (auto i: aux) 51 | ans += i, ans += x; 52 | } 53 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 200005; 13 | int bit[mxN]; 14 | void upd(int k) { 15 | for (; k < mxN; k += k&-k) 16 | bit[k] += 1; 17 | } 18 | int qry(int k) { 19 | int sm = 0; 20 | for (; k > 0; k -= k&-k) 21 | sm += bit[k]; 22 | return sm; 23 | } 24 | 25 | signed main(){ 26 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 27 | #ifdef LOCAL 28 | freopen("input.txt", "r" , stdin); 29 | freopen("output.txt", "w", stdout); 30 | #endif 31 | 32 | int n; cin>>n; 33 | int a[n]; 34 | //index compression 35 | map mp; 36 | vector v; 37 | for (int i = 0; i < n; i++) { 38 | cin>>a[i]; 39 | v.push_back(a[i]); 40 | } 41 | sort(v.begin(), v.end()); 42 | int ct = 0; 43 | for (auto i: v) 44 | mp[i] = ++ct; 45 | 46 | int inv[n] = {0}; 47 | for (int i = n-1; i >= 0; i--) { 48 | inv[i] = qry(ct) - qry(mp[a[i]]); 49 | upd(mp[a[i]]); 50 | } 51 | memset(bit, 0, sizeof bit); 52 | int ans = 0; 53 | //position of element is decided by the number of inversions 54 | //i.e. whether inversions are less on left or right 55 | for (int i = 0; i < n; i++) { 56 | int x = qry(ct) - qry(mp[a[i]]); 57 | upd(mp[a[i]]); 58 | ans += min(x, inv[i]); 59 | } 60 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | map mp; 13 | const int mxN = 200005; 14 | const int md = 1e9+7; 15 | int bit[mxN]; 16 | void upd(int k, int v) { 17 | for (; k < mxN; k += k&-k) 18 | (bit[k] += v)%=md;; 19 | } 20 | int qry(int k) { 21 | int sum = 0; 22 | for (; k > 0; k -= k&-k) 23 | (sum += bit[k])%=md; 24 | return sum; 25 | } 26 | signed main(){ 27 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 28 | #ifdef LOCAL 29 | freopen("input.txt", "r" , stdin); 30 | freopen("output.txt", "w", stdout); 31 | #endif 32 | 33 | int n; cin>>n; 34 | //index compression 35 | int a[n]; 36 | set s; 37 | for (int i = 0; i < n; i++) { 38 | cin>>a[i]; 39 | s.insert(a[i]); 40 | } 41 | int ct = 0; 42 | for (auto i: s) 43 | mp[i] = ++ct; 44 | int ans = 0; 45 | for (int i = 0; i < n; i++) { 46 | int x = qry(mp[a[i]]-1)+1; 47 | (ans += x)%=md; 48 | upd(mp[a[i]], x); 49 | } 50 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int n,m; cin>>n>>m; 20 | vector adj[n+1]; 21 | for (int i = 0; i < m; i++) { 22 | int a, b; cin>>a>>b; 23 | adj[a].push_back(b); 24 | adj[b].push_back(a); 25 | } 26 | int vis[n+1] = {0}; 27 | queue q; 28 | for (int i = 1; i < n+1; i++) { 29 | if (vis[i] == 0) { 30 | q.push(i); 31 | vis[i] = 1; 32 | 33 | while(!q.empty()) { 34 | int s = q.front(); 35 | q.pop(); 36 | vis[s] = 2; 37 | for (auto x: adj[s]) { 38 | if (vis[x] == 2) continue; 39 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int md = 1e9+7; 13 | int exp(int x, int y, int md){ 14 | int ans = 1; 15 | x = x%md; 16 | while (y > 0) { 17 | if (y&1) 18 | ans = ans*x%md; 19 | y = y>>1; 20 | x = x*x%md; 21 | } 22 | return ans; 23 | } 24 | 25 | const int mxN = 2e6+6; 26 | int F[mxN], I[mxN]; 27 | 28 | signed main(){ 29 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 30 | #ifdef LOCAL 31 | freopen("input.txt", "r" , stdin); 32 | freopen("output.txt", "w", stdout); 33 | #endif 34 | 35 | //catalan 36 | int n; cin>>n; 37 | if (n&1) return cout<<0, 0; 38 | n >>= 1; 39 | F[0] = 1, I[0] = 1; 40 | for (int i = 1; i < mxN; i++) { 41 | F[i] = F[i-1]*i%md; 42 | I[i] = exp(F[i], md-2, md); 43 | } 44 | int ans = F[2*n]*I[n]%md*I[n]%md; 45 | ans = ans*exp(n+1, md-2, md)%md; 46 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | struct node { 13 | node *left, *right; 14 | int weight, size; 15 | char value; 16 | node(char v) { 17 | left = right = NULL; 18 | weight = rand(); 19 | size = 1; 20 | value = v; 21 | } 22 | }; 23 | 24 | int size(node *treap) { 25 | if (treap == NULL) return 0; 26 | return treap->size; 27 | } 28 | 29 | void split(node *treap, node *&left, node *&right, int k) { 30 | if (treap == NULL) { 31 | left = right = NULL; 32 | } 33 | else { 34 | if (size(treap->left) < k) { 35 | split(treap->right, treap->right, right, k - size(treap->left)-1); 36 | left = treap; 37 | } 38 | else { 39 | split(treap->left, left, treap->left, k); 40 | right = treap; 41 | } 42 | treap->size = size(treap->left) + size(treap->right) + 1; 43 | } 44 | } 45 | 46 | void merge(node *&treap, node *left, node *right) { 47 | if (left == NULL) treap = right; 48 | else if(right == NULL) treap = left; 49 | else { 50 | if (left->weight < right->weight) { 51 | merge(left->right, left->right, right); 52 | treap = left; 53 | } 54 | else { 55 | merge(right->left, left, right->left); 56 | treap = right; 57 | } 58 | treap->size = size(treap->left) + size(treap->right) + 1; 59 | } 60 | } 61 | 62 | void print(node *treap) { 63 | if (treap == NULL) return; 64 | print(treap->left); 65 | cout << treap->value; 66 | print(treap->right); 67 | } 68 | 69 | 70 | signed main(){ 71 | cin.tie(0)->sync_with_stdio(0); 72 | #ifdef LOCAL 73 | freopen("input.txt", "r" , stdin); 74 | freopen("output.txt", "w", stdout); 75 | #endif 76 | 77 | node *treap = 0; 78 | int n, m; cin >> n >> m; 79 | string s; cin >> s; 80 | for (auto i: s) { 81 | merge(treap, treap, new node(i)); 82 | } 83 | 84 | while (m--) { 85 | int x, y; cin >> x >> y; 86 | node *A, *B, *C, *D; 87 | split(treap, A, B, x - 1); 88 | split(B, D, C, y - x + 1); 89 | merge(treap, A, C); 90 | merge(treap, treap, D); 91 | } 92 | print(treap); 93 | } -------------------------------------------------------------------------------- /src/2076 - Necessary Roads.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Necessary Roads 3 | Problem Link: https://cses.fi/problemset/task/2076 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e5+5; 13 | vector adj[mxN]; 14 | vector> ans; 15 | int vis[mxN], low[mxN]; 16 | int cnt = 0; 17 | 18 | void dfs(int s, int p) { 19 | vis[s] = ++cnt; 20 | low[s] = vis[s]; 21 | for (auto i: adj[s]) { 22 | if (i != p) { 23 | if (vis[i]) //back edge 24 | low[s] = min(low[s], vis[i]); 25 | else { 26 | dfs(i, s); 27 | low[s] = min(low[s], low[i]); 28 | if (low[i] > vis[s]) 29 | ans.push_back({s, i}); 30 | } 31 | } 32 | } 33 | } 34 | 35 | signed main(){ 36 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 37 | #ifdef LOCAL 38 | freopen("input.txt", "r" , stdin); 39 | freopen("output.txt", "w", stdout); 40 | #endif 41 | 42 | int n,m; cin>>n>>m; 43 | for (int i = 0; i < m; i++) { 44 | int x, y; cin>>x>>y; 45 | adj[x].push_back(y); 46 | adj[y].push_back(x); 47 | } 48 | for (int i = 1; i <= n; i++) { 49 | if (!vis[i]) 50 | dfs(i, 0); 51 | } 52 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e5+5; 13 | vector adj[mxN]; 14 | int ans[mxN]; 15 | int vis[mxN], low[mxN]; 16 | int cnt = 0; 17 | 18 | void dfs(int s, int p) { 19 | vis[s] = ++cnt; 20 | low[s] = vis[s]; 21 | int ch = 0; //children connected with tree-edge 22 | for (auto i: adj[s]) { 23 | if (i != p) { 24 | if (vis[i]) //back edge 25 | low[s] = min(low[s], vis[i]); 26 | else { 27 | dfs(i, s); 28 | low[s] = min(low[s], low[i]); 29 | if (p != 0 && low[i] >= vis[s]) 30 | ans[s] = 1; 31 | ch++; 32 | } 33 | } 34 | } 35 | if (p == 0 && ch > 1) 36 | ans[s] = 1; 37 | } 38 | 39 | signed main(){ 40 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 41 | #ifdef LOCAL 42 | freopen("input.txt", "r" , stdin); 43 | freopen("output.txt", "w", stdout); 44 | #endif 45 | 46 | int n, m; cin>>n>>m; 47 | for (int i = 0; i < m; i++) { 48 | int x, y; cin>>x>>y; 49 | adj[x].push_back(y); 50 | adj[y].push_back(x); 51 | } 52 | for (int i = 1; i <= n; i++) { 53 | if (!vis[i]) 54 | dfs(i, 0); 55 | } 56 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e5+5; 13 | const int md = 1e9+7; 14 | vector adj[mxN]; 15 | int vis[mxN]; 16 | 17 | int exp(int x, int y, int md){ 18 | int ans = 1; 19 | x = x%md; 20 | while (y > 0) { 21 | if (y&1) 22 | ans = ans*x%md; 23 | y = y>>1; 24 | x = x*x%md; 25 | } 26 | return ans; 27 | } 28 | 29 | int cnt = 0; 30 | void dfs(int s, int p) { 31 | if (vis[s]) return; 32 | vis[s] = 1; 33 | for (auto i: adj[s]) if (i != p) { 34 | if (vis[i] == 1) 35 | cnt++; 36 | else if (vis[i] == 0) 37 | dfs(i, s); 38 | } 39 | vis[s] = 2; 40 | } 41 | 42 | signed main(){ 43 | cin.tie(0)->sync_with_stdio(0); 44 | #ifdef LOCAL 45 | freopen("input.txt", "r" , stdin); 46 | freopen("output.txt", "w", stdout); 47 | #endif 48 | 49 | int n, m; cin >> n >> m; 50 | for (int i = 0; i < m; i++) { 51 | int x, y; cin >> x >> y; 52 | adj[x].push_back(y); 53 | adj[y].push_back(x); 54 | } 55 | 56 | int ans = 1; 57 | for (int i = 1; i <= n; i++) { 58 | if (vis[i] == 0) { 59 | cnt = 0; 60 | dfs(i, 0); 61 | ans = ans * exp(2, cnt, md) % md; 62 | } 63 | } 64 | 65 | cout << ans; 66 | } -------------------------------------------------------------------------------- /src/2079 - Finding a Centroid.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Finding a Centroid 3 | Problem Link: https://cses.fi/problemset/task/2079 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 2e5+5; 13 | vector adj[mxN]; 14 | int dp[mxN]; 15 | 16 | void dfs(int s, int p) { 17 | dp[s] = 1; 18 | for (auto i: adj[s]) { 19 | if (i != p) { 20 | dfs(i, s); 21 | dp[s] += dp[i]; 22 | } 23 | } 24 | } 25 | 26 | int n; 27 | int dfs2(int s, int p) { 28 | pair mx = {0, s}; 29 | for (auto i: adj[s]) { 30 | if (i != p) { 31 | mx = max(mx, {dp[i], i}); 32 | } 33 | } 34 | if (mx.first <= n/2) 35 | return s; 36 | return dfs2(mx.second, s); 37 | } 38 | 39 | signed main(){ 40 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 41 | #ifdef LOCAL 42 | freopen("input.txt", "r" , stdin); 43 | freopen("output.txt", "w", stdout); 44 | #endif 45 | 46 | cin>>n; 47 | for (int i = 1; i < n; i++) { 48 | int x, y; cin>>x>>y; 49 | adj[x].push_back(y); 50 | adj[y].push_back(x); 51 | } 52 | dfs(1, 0); 53 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 2e5+5; 13 | vector adj[mxN]; 14 | int mark[mxN], dp[mxN], dis[mxN] = {1}; 15 | 16 | int dfs(int s, int p) { 17 | dp[s] = 1; 18 | for (auto i: adj[s]) { 19 | if (i != p && !mark[i]) { 20 | dp[s] += dfs(i, s); 21 | } 22 | } 23 | return dp[s]; 24 | } 25 | 26 | int k; 27 | int ans = 0, mxd = 0; 28 | 29 | int dfs2(int s, int p, int n) { 30 | for (auto i: adj[s]) { 31 | if (i != p && !mark[i] && dp[i] > n/2) { 32 | return dfs2(i, s, n); 33 | } 34 | } 35 | return s; 36 | } 37 | 38 | 39 | void dfs3(int s, int p, int d, int flag) { 40 | if (d > k) return; 41 | mxd = max(mxd, d); 42 | if (flag) dis[d]++; 43 | else ans += dis[k-d]; 44 | for (auto i: adj[s]) { 45 | if (i != p && !mark[i]) 46 | dfs3(i, s, d+1, flag); 47 | } 48 | } 49 | 50 | 51 | void solve(int s) { 52 | dfs(s, 0); 53 | int ct = dfs2(s, 0, dp[s]); 54 | mark[ct] = 1; 55 | mxd = 0; 56 | for (auto i: adj[ct]) { 57 | if (!mark[i]) { 58 | dfs3(i, ct, 1, 0); 59 | dfs3(i, ct, 1, 1); 60 | } 61 | } 62 | fill(dis + 1, dis + mxd + 1, 0); 63 | for (auto i: adj[ct]) if (!mark[i]) { 64 | solve(i); 65 | } 66 | } 67 | 68 | 69 | signed main(){ 70 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 71 | #ifdef LOCAL 72 | freopen("input.txt", "r" , stdin); 73 | freopen("output.txt", "w", stdout); 74 | #endif 75 | 76 | int n; cin>>n>>k; 77 | for (int i = 1; i < n; i++) { 78 | int x, y; cin>>x>>y; 79 | adj[x].push_back(y); 80 | adj[y].push_back(x); 81 | } 82 | solve(1); 83 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 2e5+5; 13 | vector adj[mxN]; 14 | int mark[mxN], dp[mxN], bit[mxN]; 15 | int k1, k2; 16 | int ans = 0, mxd = 0; 17 | 18 | void update(int k, int x) { 19 | for (; k < mxN; k += k&-k) 20 | bit[k] += x; 21 | } 22 | 23 | int query(int l, int r) { 24 | int s = 0, k = r; 25 | for (; k > 0; k -= k&-k) 26 | s += bit[k]; 27 | k = l-1; 28 | for (; k > 0; k -= k&-k) 29 | s -= bit[k]; 30 | return s + (l == 0); 31 | } 32 | 33 | 34 | int dfs(int s, int p) { 35 | dp[s] = 1; 36 | for (auto i: adj[s]) { 37 | if (i != p && !mark[i]) { 38 | dp[s] += dfs(i, s); 39 | } 40 | } 41 | return dp[s]; 42 | } 43 | 44 | 45 | int dfs2(int s, int p, int n) { 46 | for (auto i: adj[s]) { 47 | if (i != p && !mark[i] && dp[i] > n/2) { 48 | return dfs2(i, s, n); 49 | } 50 | } 51 | return s; 52 | } 53 | 54 | 55 | void dfs3(int s, int p, int d, int flag) { 56 | if (d > k2) return; 57 | mxd = max(mxd, d); 58 | if (flag) update(d, 1); 59 | else ans += query(max(0LL, k1-d), k2-d); 60 | for (auto i: adj[s]) { 61 | if (i != p && !mark[i]) 62 | dfs3(i, s, d+1, flag); 63 | } 64 | } 65 | 66 | 67 | void solve(int s) { 68 | dfs(s, 0); 69 | int ct = dfs2(s, 0, dp[s]); 70 | mark[ct] = 1; 71 | mxd = 0; 72 | for (auto i: adj[ct]) { 73 | if (!mark[i]) { 74 | dfs3(i, ct, 1, 0); 75 | dfs3(i, ct, 1, 1); 76 | } 77 | } 78 | for (int i = 1; i <= mxd; i++) 79 | update(i, -query(i, i)); 80 | for (auto i: adj[ct]) if (!mark[i]) { 81 | solve(i); 82 | } 83 | } 84 | 85 | 86 | signed main(){ 87 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 88 | #ifdef LOCAL 89 | freopen("input.txt", "r" , stdin); 90 | freopen("output.txt", "w", stdout); 91 | #endif 92 | 93 | int n; cin>>n>>k1>>k2; 94 | for (int i = 1; i < n; i++) { 95 | int x, y; cin>>x>>y; 96 | adj[x].push_back(y); 97 | adj[y].push_back(x); 98 | } 99 | solve(1); 100 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | #define F first 12 | #define S second 13 | 14 | signed main() { 15 | cin.tie(0)->sync_with_stdio(0); 16 | #ifdef LOCAL 17 | freopen("input.txt", "r" , stdin); 18 | freopen("output.txt", "w", stdout); 19 | #endif 20 | 21 | int n, k; cin >> n >> k; 22 | vector> S = {{k, 0}}; 23 | vector v = {1}; 24 | int s[n], f[n]; 25 | for (auto &i: s) 26 | cin >> i; 27 | for (auto &i: f) 28 | cin >> i; 29 | int c = 0; 30 | for (int i = 0; i < n; i++) { 31 | int x = s[i]; 32 | int it = upper_bound(v.begin(), v.end(), x) - v.begin() - 1; 33 | int m = f[i]; 34 | c = x*S[it].F + S[it].S; 35 | if (S.back().F == m) continue; // if same slope then always bad line 36 | while (S.size() >= 2) { 37 | auto y2 = S[S.size() - 1]; 38 | auto y3 = S[S.size() - 2]; 39 | if ((y2.S - c)*(m - y3.F) < (y3.S - c)*(m - y2.F)) { 40 | S.pop_back(); 41 | v.pop_back(); 42 | } 43 | else break; 44 | } 45 | int x1 = ceil((S.back().S - c)*1.0/(m - S.back().F)); 46 | v.push_back(x1); 47 | S.push_back({m, c}); 48 | } 49 | cout << c; 50 | } -------------------------------------------------------------------------------- /src/2086 - Subarray Squares.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Subarray Squares 3 | Problem Link: https://cses.fi/problemset/task/2086 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 3005; 13 | int a[mxN], pre[mxN]; 14 | vector dp_prev(mxN), dp_cur(mxN); 15 | const int INF = 1LL<<60; 16 | 17 | int cost(int l, int r) { 18 | return (pre[r] - pre[l-1]) * (pre[r] - pre[l-1]); 19 | } 20 | 21 | void solve(int a, int b, int x, int y) { 22 | if (a > b) 23 | return; 24 | int m = (a + b) / 2; 25 | pair p = {INF, -1}; 26 | for (int i = x; i <= min(m, y); i++) { 27 | p = min(p, {dp_prev[i] + cost(i+1, m), i}); 28 | } 29 | dp_cur[m] = p.first; 30 | solve(a, m-1, x, p.second); 31 | solve(m+1, b, p.second, y); 32 | } 33 | 34 | signed main(){ 35 | cin.tie(0)->sync_with_stdio(0); 36 | #ifdef LOCAL 37 | freopen("input.txt", "r" , stdin); 38 | freopen("output.txt", "w", stdout); 39 | #endif 40 | 41 | int n, k; cin >> n >> k; 42 | for (int i = 0; i < n; i++) { 43 | cin >> a[i]; 44 | pre[i+1] = pre[i] + a[i]; 45 | } 46 | 47 | for (int i = 1; i <= n; i++) 48 | dp_prev[i] = cost(1, i); 49 | 50 | for (int i = 2; i <= k; i++) { 51 | solve(1, n, 1, n); 52 | dp_prev = dp_cur; 53 | } 54 | cout << dp_prev[n]; 55 | } -------------------------------------------------------------------------------- /src/2087 - Houses and Schools.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Houses and Schools 3 | Problem Link: https://cses.fi/problemset/task/2087 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 3005; 13 | int a[mxN], pre[3][mxN]; 14 | int dp[mxN][mxN]; //dp[i][j] = min cost for j divisions with 1 school at i. 15 | const int INF = 1LL<<60; 16 | int n; 17 | 18 | int cost(int a, int b) { 19 | int m = (a+b)/2; 20 | int ans = (pre[1][m] - pre[1][a-1]) - a*(pre[0][m] - pre[0][a-1]); 21 | ans += (pre[2][b] - pre[2][m]) - (n-b+1)*(pre[0][b] - pre[0][m]); 22 | return ans; 23 | } 24 | 25 | void solve(int j, int a, int b, int x, int y) { 26 | if (a > b) 27 | return; 28 | int m = (a + b) / 2; 29 | pair p = {INF, -1}; 30 | for (int i = x; i <= min(m, y); i++) { 31 | p = min(p, {dp[i][j-1] + cost(i, m), i}); 32 | } 33 | dp[m][j] = p.first; 34 | solve(j, a, m-1, x, p.second); 35 | solve(j, m+1, b, p.second, y); 36 | } 37 | 38 | signed main(){ 39 | cin.tie(0)->sync_with_stdio(0); 40 | #ifdef LOCAL 41 | freopen("input.txt", "r" , stdin); 42 | freopen("output.txt", "w", stdout); 43 | #endif 44 | 45 | int k; cin >> n >> k; 46 | for (int i = 0; i < n; i++) { 47 | cin >> a[i]; 48 | pre[0][i+1] = pre[0][i] + a[i]; 49 | pre[1][i+1] = pre[1][i] + (i+1)*a[i]; 50 | pre[2][i+1] = pre[2][i] + (n-i)*a[i]; 51 | } 52 | 53 | for (int i = 1; i <= n; i++) 54 | dp[i][1] = (pre[2][i] - pre[2][0]) - (n-i+1)*(pre[0][i] - pre[0][0]); 55 | 56 | for (int i = 2; i <= k; i++) { 57 | solve(i, 1, n, 1, n); 58 | } 59 | int ans = INF; 60 | for (int i = 1; i <= n; i++) { 61 | ans = min(ans, dp[i][k] + (pre[1][n] - pre[1][i-1]) - i*(pre[0][n] - pre[0][i-1])); 62 | } 63 | cout << ans; 64 | } -------------------------------------------------------------------------------- /src/2088 - Knuth Division.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Knuth Division 3 | Problem Link: https://cses.fi/problemset/task/2088 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 5e3+5; 13 | pair dp[mxN][mxN]; 14 | int pre[mxN]; 15 | const int INF = 1LL<<60; 16 | 17 | signed main(){ 18 | cin.tie(0)->sync_with_stdio(0); 19 | #ifdef LOCAL 20 | freopen("input.txt", "r" , stdin); 21 | freopen("output.txt", "w", stdout); 22 | #endif 23 | 24 | int n; cin >> n; 25 | for (int i = 1, x; i <= n; i++) { 26 | cin >> x; 27 | pre[i] = pre[i-1] + x; 28 | } 29 | for (int i = 1; i < n; i++) { 30 | dp[i][i+1] = {pre[i+1] - pre[i-1], i}; 31 | } 32 | 33 | for (int k = 3; k <= n; k++) { 34 | for (int i = 1; i+k-1 <= n; i++) { 35 | int j = i+k-1; 36 | pair p = {dp[i][j-1].second, dp[i+1][j].second}; 37 | dp[i][j] = {INF, -1}; 38 | for (int x = p.first; x <= p.second; x++) { 39 | dp[i][j] = min(dp[i][j], {dp[i][x].first + dp[x+1][j].first, x}); 40 | } 41 | dp[i][j].first += pre[j] - pre[i-1]; 42 | } 43 | } 44 | cout << dp[1][n].first; 45 | 46 | } -------------------------------------------------------------------------------- /src/2101 - New Roads Queries.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: New Roads Queries 3 | Problem Link: https://cses.fi/problemset/task/2101 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | // #define int long long 10 | #define endl '\n' 11 | #define F first 12 | #define S second 13 | 14 | const int mxN = 2e5+5; 15 | int par[mxN], len[mxN]; 16 | 17 | void init() { 18 | for (int i = 0; i < mxN; i++) 19 | par[i] = i, len[i] = 1; 20 | } 21 | 22 | int find(int x) { 23 | if (par[x] == x) 24 | return x; 25 | return par[x] = find(par[x]); 26 | } 27 | 28 | void join(int x, int y) { 29 | x = find(x); 30 | y = find(y); 31 | if (x != y) { 32 | if (len[x] < len[y]) 33 | swap(x, y); 34 | par[y] = x; 35 | len[x] += len[y]; 36 | } 37 | } 38 | 39 | signed main(){ 40 | cin.tie(0)->sync_with_stdio(0); 41 | #ifdef LOCAL 42 | freopen("input.txt", "r" , stdin); 43 | freopen("output.txt", "w", stdout); 44 | #endif 45 | 46 | int n, m, t; cin >> n >> m >> t; 47 | vector> edges(m); 48 | for (auto &[i, j]: edges) 49 | cin >> i >> j; 50 | vector> v(t); 51 | for (auto &[i, j]: v) 52 | cin >> i >> j; 53 | 54 | vector> range(t); 55 | vector ans(t, -1); 56 | for (int i = 0; i < t; i++) { 57 | range[i] = {0, m}; 58 | } 59 | 60 | while (1) { 61 | init(); 62 | vector> mid; 63 | for (int i = 0; i < t; i++) if (range[i].F <= range[i].S) { 64 | int m = (range[i].F + range[i].S) / 2; 65 | mid.push_back({m, i}); 66 | } 67 | if (mid.size() == 0) 68 | break; 69 | 70 | sort(mid.begin(), mid.end()); 71 | int j = 0; 72 | for (int i = 0; i <= m; i++) { 73 | if (i) join(edges[i-1].F, edges[i-1].S); 74 | while (j < mid.size() && mid[j].F == i) { 75 | int k = mid[j].S; 76 | if (find(v[k].F) == find(v[k].S)) { 77 | ans[k] = i; 78 | range[k] = {range[k].F, i-1}; 79 | } 80 | else { 81 | range[k] = {i+1, range[k].S}; 82 | } 83 | j++; 84 | } 85 | } 86 | } 87 | for (int i = 0; i < t; i++) 88 | cout << ans[i] << endl; 89 | } -------------------------------------------------------------------------------- /src/2102 - Finding Patterns.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Finding Patterns 3 | Problem Link: https://cses.fi/problemset/task/2102 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e5+5; 13 | int sa[mxN], pos[mxN], tmp[mxN]; 14 | int gap, N; 15 | string S; 16 | 17 | bool comp(int x, int y) { 18 | if (pos[x] != pos[y]) 19 | return pos[x] < pos[y]; 20 | x += gap; 21 | y += gap; 22 | return (x < N && y < N) ? pos[x] < pos[y] : x > y; 23 | } 24 | 25 | void suffix() { 26 | for (int i = 0; i < N; i++) 27 | sa[i] = i, pos[i] = S[i]; 28 | 29 | for (gap = 1;; gap <<= 1) { 30 | sort(sa, sa+N, comp); 31 | for (int i = 0; i < N-1; i++) 32 | tmp[i+1] = tmp[i] + comp(sa[i], sa[i+1]); 33 | for (int i = 0; i < N; i++) 34 | pos[sa[i]] = tmp[i]; 35 | if (tmp[N - 1] == N - 1) 36 | break; 37 | } 38 | } 39 | 40 | int check(int m, string &x) { 41 | int f = -1, k = x.size(), j = sa[m]; 42 | if (N - j >= k) 43 | f = 0; 44 | for (int i = 0; i < min(N - j, k); i++) { 45 | if (S[j+i] < x[i]) 46 | return -1; 47 | if (S[j+i] > x[i]) 48 | return 1; 49 | } 50 | return f; 51 | } 52 | 53 | signed main(){ 54 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 55 | #ifdef LOCAL 56 | freopen("input.txt", "r" , stdin); 57 | freopen("output.txt", "w", stdout); 58 | #endif 59 | 60 | cin>>S; 61 | N = S.size(); 62 | suffix(); 63 | int t; cin>>t; 64 | while (t--) { 65 | string x; cin>>x; 66 | int l = 0, r = N - 1; 67 | int f = 0; 68 | while (l <= r) { 69 | int m = l + (r-l)/2; 70 | int v = check(m, x); 71 | if (v == 0) { 72 | f = 1; 73 | break; 74 | } 75 | else if (v == -1) 76 | l = m + 1; 77 | else 78 | r = m - 1; 79 | } 80 | cout << (f ? "YES" : "NO") << endl; 81 | } 82 | } -------------------------------------------------------------------------------- /src/2103 - Counting Patterns.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Counting Patterns 3 | Problem Link: https://cses.fi/problemset/task/2103 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e5+5; 13 | int sa[mxN], pos[mxN], tmp[mxN]; 14 | int gap, N; 15 | string S; 16 | 17 | bool comp(int x, int y) { 18 | if (pos[x] != pos[y]) 19 | return pos[x] < pos[y]; 20 | x += gap; 21 | y += gap; 22 | return (x < N && y < N) ? pos[x] < pos[y] : x > y; 23 | } 24 | 25 | void suffix() { 26 | for (int i = 0; i < N; i++) 27 | sa[i] = i, pos[i] = S[i]; 28 | 29 | for (gap = 1;; gap <<= 1) { 30 | sort(sa, sa+N, comp); 31 | for (int i = 0; i < N-1; i++) 32 | tmp[i+1] = tmp[i] + comp(sa[i], sa[i+1]); 33 | for (int i = 0; i < N; i++) 34 | pos[sa[i]] = tmp[i]; 35 | if (tmp[N - 1] == N - 1) 36 | break; 37 | } 38 | } 39 | 40 | int check(int m, string &x) { 41 | int f = -1, k = x.size(), j = sa[m]; 42 | if (N - j >= k) 43 | f = 0; 44 | for (int i = 0; i < min(N - j, k); i++) { 45 | if (S[j+i] < x[i]) 46 | return -1; 47 | if (S[j+i] > x[i]) 48 | return 1; 49 | } 50 | return f; 51 | } 52 | 53 | signed main(){ 54 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 55 | #ifdef LOCAL 56 | freopen("input.txt", "r" , stdin); 57 | freopen("output.txt", "w", stdout); 58 | #endif 59 | 60 | cin>>S; 61 | N = S.size(); 62 | suffix(); 63 | int t; cin>>t; 64 | while (t--) { 65 | string x; cin>>x; 66 | int L = 0, R = N - 1; 67 | int ans = -1, l = L, r = R; 68 | while (l <= r) { 69 | int m = l + (r-l)/2; 70 | int v = check(m, x); 71 | if (v == 0) { 72 | ans = m; 73 | r = m - 1; 74 | } 75 | else if (v == 1) 76 | r = m - 1; 77 | else 78 | l = m + 1; 79 | } 80 | if (ans == -1) {cout << 0 << endl; continue;} 81 | L = ans, l = L, r = R; 82 | while (l <= r) { 83 | int m = l + (r-l)/2; 84 | int v = check(m, x); 85 | if (v == 0) { 86 | ans = m; 87 | l = m + 1; 88 | } 89 | else if (v == -1) 90 | l = m + 1; 91 | else 92 | r = m - 1; 93 | } 94 | R = ans; 95 | cout << R - L + 1 << endl; 96 | } 97 | } -------------------------------------------------------------------------------- /src/2105 - Distinct Substrings.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Distinct Substrings 3 | Problem Link: https://cses.fi/problemset/task/2105 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e5+5; 13 | int sa[mxN], pos[mxN], tmp[mxN], lcp[mxN]; 14 | int gap, N; 15 | string S; 16 | 17 | bool comp(int x, int y) { 18 | if (pos[x] != pos[y]) 19 | return pos[x] < pos[y]; 20 | x += gap; 21 | y += gap; 22 | return (x < N && y < N) ? pos[x] < pos[y] : x > y; 23 | } 24 | 25 | void suffix() { 26 | for (int i = 0; i < N; i++) 27 | sa[i] = i, pos[i] = S[i]; 28 | 29 | for (gap = 1;; gap <<= 1) { 30 | sort(sa, sa+N, comp); 31 | for (int i = 0; i < N-1; i++) 32 | tmp[i+1] = tmp[i] + comp(sa[i], sa[i+1]); 33 | for (int i = 0; i < N; i++) 34 | pos[sa[i]] = tmp[i]; 35 | if (tmp[N - 1] == N - 1) 36 | break; 37 | } 38 | } 39 | 40 | void build_lcp() { 41 | for (int i = 0, k = 0; i < N; i++) if (pos[i] != N-1) { 42 | int j = sa[pos[i] + 1]; 43 | while (S[i + k] == S[j + k]) 44 | k++; 45 | lcp[pos[i]] = k; 46 | if (k) k--; 47 | } 48 | } 49 | 50 | signed main(){ 51 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 52 | #ifdef LOCAL 53 | freopen("input.txt", "r" , stdin); 54 | freopen("output.txt", "w", stdout); 55 | #endif 56 | 57 | cin>>S; N = S.size(); 58 | suffix(); 59 | build_lcp(); 60 | int sm = accumulate(lcp, lcp+N, 0LL); 61 | cout << N*(N+1)/2 - sm; 62 | } -------------------------------------------------------------------------------- /src/2106 - Repeating Substring.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Repeating Substring 3 | Problem Link: https://cses.fi/problemset/task/2106 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e5+5; 13 | int sa[mxN], pos[mxN], tmp[mxN], lcp[mxN]; 14 | int gap, N; 15 | string S; 16 | 17 | bool comp(int x, int y) { 18 | if (pos[x] != pos[y]) 19 | return pos[x] < pos[y]; 20 | x += gap; 21 | y += gap; 22 | return (x < N && y < N) ? pos[x] < pos[y] : x > y; 23 | } 24 | 25 | void suffix() { 26 | for (int i = 0; i < N; i++) 27 | sa[i] = i, pos[i] = S[i]; 28 | 29 | for (gap = 1;; gap <<= 1) { 30 | sort(sa, sa+N, comp); 31 | for (int i = 0; i < N-1; i++) 32 | tmp[i+1] = tmp[i] + comp(sa[i], sa[i+1]); 33 | for (int i = 0; i < N; i++) 34 | pos[sa[i]] = tmp[i]; 35 | if (tmp[N - 1] == N - 1) 36 | break; 37 | } 38 | } 39 | 40 | void build_lcp() { 41 | for (int i = 0, k = 0; i < N; i++) if (pos[i] != N-1) { 42 | int j = sa[pos[i] + 1]; 43 | while (S[i + k] == S[j + k]) 44 | k++; 45 | lcp[pos[i]] = k; 46 | if (k) k--; 47 | } 48 | } 49 | 50 | signed main(){ 51 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 52 | #ifdef LOCAL 53 | freopen("input.txt", "r" , stdin); 54 | freopen("output.txt", "w", stdout); 55 | #endif 56 | 57 | cin>>S; N = S.size(); 58 | suffix(); 59 | build_lcp(); 60 | int mx = max_element(lcp, lcp+N) - lcp; 61 | if (lcp[mx] == 0) return cout<<-1, 0; 62 | cout << S.substr(sa[mx], lcp[mx]); 63 | } -------------------------------------------------------------------------------- /src/2107 - String Functions.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: String Functions 3 | Problem Link: https://cses.fi/problemset/task/2107 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e6+6; 13 | int pi[mxN], z[mxN]; 14 | 15 | signed main(){ 16 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 17 | #ifdef LOCAL 18 | freopen("input.txt", "r" , stdin); 19 | freopen("output.txt", "w", stdout); 20 | #endif 21 | 22 | string s; cin>>s; 23 | int n = s.size(); 24 | 25 | for (int i = 1, l = 0, r = 0; i < n; i++) { 26 | int j = pi[i-1]; 27 | while (j && s[j] != s[i]) 28 | j = pi[j-1]; 29 | if (s[j] == s[i]) 30 | j++; 31 | pi[i] = j; 32 | 33 | z[i] = max(0LL, min(z[i - l], r - i + 1)); 34 | while (i + z[i] < n && s[z[i]] == s[i + z[i]]) 35 | z[i]++; 36 | if (i + z[i] - 1 > r) 37 | l = i, r = i + z[i] - 1; 38 | } 39 | 40 | for (int i = 0; i < n; i++) 41 | cout << z[i] << ' '; 42 | cout << endl; 43 | for (int i = 0; i < n; i++) 44 | cout << pi[i] << ' '; 45 | } -------------------------------------------------------------------------------- /src/2108 - Substring Order I.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Substring Order I 3 | Problem Link: https://cses.fi/problemset/task/2108 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e5+5; 13 | int sa[mxN], pos[mxN], tmp[mxN], lcp[mxN]; 14 | int gap, N; 15 | string S; 16 | 17 | bool comp(int x, int y) { 18 | if (pos[x] != pos[y]) 19 | return pos[x] < pos[y]; 20 | x += gap; 21 | y += gap; 22 | return (x < N && y < N) ? pos[x] < pos[y] : x > y; 23 | } 24 | 25 | void suffix() { 26 | for (int i = 0; i < N; i++) 27 | sa[i] = i, pos[i] = S[i]; 28 | 29 | for (gap = 1;; gap <<= 1) { 30 | sort(sa, sa+N, comp); 31 | for (int i = 0; i < N-1; i++) 32 | tmp[i+1] = tmp[i] + comp(sa[i], sa[i+1]); 33 | for (int i = 0; i < N; i++) 34 | pos[sa[i]] = tmp[i]; 35 | if (tmp[N - 1] == N - 1) 36 | break; 37 | } 38 | } 39 | 40 | void build_lcp() { 41 | for (int i = 0, k = 0; i < N; i++) if (pos[i] != N-1) { 42 | int j = sa[pos[i] + 1]; 43 | while (S[i + k] == S[j + k]) 44 | k++; 45 | lcp[pos[i]] = k; 46 | if (k) k--; 47 | } 48 | } 49 | 50 | signed main(){ 51 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 52 | #ifdef LOCAL 53 | freopen("input.txt", "r" , stdin); 54 | freopen("output.txt", "w", stdout); 55 | #endif 56 | 57 | cin>>S; N = S.size(); 58 | suffix(); 59 | build_lcp(); 60 | int k; cin>>k; 61 | int prev = 0; 62 | int cur = 0; 63 | for (int i = 0; i < N; i++) { 64 | if (cur + (N-sa[i]) - prev >= k) { 65 | int j = prev; 66 | string ans = S.substr(sa[i], j); 67 | while (cur < k) { 68 | ans += S[sa[i]+j]; 69 | cur++; 70 | j++; 71 | } 72 | return cout << ans, 0; 73 | } 74 | cur += (N-sa[i]) - prev; 75 | prev = lcp[i]; 76 | } 77 | } -------------------------------------------------------------------------------- /src/2110 - Substring Distribution.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Substring Distribution 3 | Problem Link: https://cses.fi/problemset/task/2110 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e5+5; 13 | int sa[mxN], pos[mxN], tmp[mxN], lcp[mxN]; 14 | int gap, N; 15 | string S; 16 | 17 | bool comp(int x, int y) { 18 | if (pos[x] != pos[y]) 19 | return pos[x] < pos[y]; 20 | x += gap; 21 | y += gap; 22 | return (x < N && y < N) ? pos[x] < pos[y] : x > y; 23 | } 24 | 25 | void suffix() { 26 | for (int i = 0; i < N; i++) 27 | sa[i] = i, pos[i] = S[i]; 28 | 29 | for (gap = 1;; gap <<= 1) { 30 | sort(sa, sa+N, comp); 31 | for (int i = 0; i < N-1; i++) 32 | tmp[i+1] = tmp[i] + comp(sa[i], sa[i+1]); 33 | for (int i = 0; i < N; i++) 34 | pos[sa[i]] = tmp[i]; 35 | if (tmp[N - 1] == N - 1) 36 | break; 37 | } 38 | } 39 | 40 | void build_lcp() { 41 | for (int i = 0, k = 0; i < N; i++) if (pos[i] != N-1) { 42 | int j = sa[pos[i] + 1]; 43 | while (S[i + k] == S[j + k]) 44 | k++; 45 | lcp[pos[i]] = k; 46 | if (k) k--; 47 | } 48 | } 49 | 50 | int pre[mxN]; 51 | 52 | signed main(){ 53 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 54 | #ifdef LOCAL 55 | freopen("input.txt", "r" , stdin); 56 | freopen("output.txt", "w", stdout); 57 | #endif 58 | 59 | cin>>S; N = S.size(); 60 | suffix(); 61 | build_lcp(); 62 | int prev = 0; 63 | for (int i = 0; i < N; i++) { 64 | pre[prev + 1]++; 65 | pre[N - sa[i] + 1]--; 66 | prev = lcp[i]; 67 | } 68 | for (int i = 1; i <= N; i++) { 69 | cout << pre[i] << ' ' ; 70 | pre[i+1] += pre[i]; 71 | } 72 | } -------------------------------------------------------------------------------- /src/2136 - Hamming Distance.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Hamming Distance 3 | Problem Link: https://cses.fi/problemset/task/2136 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int n,k; cin>>n>>k; 20 | vector v(n, 0); 21 | for (int i = 0; i < n; i++) { 22 | string s; cin>>s; 23 | reverse(s.begin(), s.end()); 24 | for (int j = 0; j < s.size(); j++) { 25 | v[i] += (s[j] == '1')*(1< 8 | using namespace std; 9 | 10 | #define int long long 11 | #define endl '\n' 12 | 13 | signed main(){ 14 | cin.tie(0)->sync_with_stdio(0); 15 | #ifdef LOCAL 16 | freopen("input.txt", "r" , stdin); 17 | freopen("output.txt", "w", stdout); 18 | #endif 19 | 20 | int n; cin >> n; 21 | vector> v(n); 22 | for (auto &i: v) 23 | cin >> i; 24 | int ans = 0; 25 | for (int i = 0; i < n; i++) { 26 | for (int j = i+1; j < n; j++) { 27 | int cnt = (v[i]&v[j]).count(); 28 | ans += cnt * (cnt - 1) / 2; 29 | } 30 | } 31 | cout << ans; 32 | } -------------------------------------------------------------------------------- /src/2138 - Reachable Nodes.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Reachable Nodes 3 | Problem Link: https://cses.fi/problemset/task/2138 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 5e4 + 5; 13 | vector> dp(mxN); 14 | vector v, adj[mxN]; 15 | bool vis[mxN]; 16 | 17 | void dfs(int s) { 18 | if (vis[s]) return; 19 | vis[s] = 1; 20 | for (auto i: adj[s]) 21 | dfs(i); 22 | v.push_back(s); 23 | } 24 | 25 | signed main(){ 26 | cin.tie(0)->sync_with_stdio(0); 27 | #ifdef LOCAL 28 | freopen("input.txt", "r" , stdin); 29 | freopen("output.txt", "w", stdout); 30 | #endif 31 | 32 | int n, m; cin >> n >> m; 33 | for (int i = 0; i < m; i++) { 34 | int x, y; cin >> x >> y; 35 | adj[x].push_back(y); 36 | } 37 | for (int i = 1; i <= n; i++) 38 | dfs(i); 39 | 40 | for (auto s: v) { 41 | dp[s][s] = 1; 42 | for (auto i: adj[s]) 43 | dp[s] |= dp[i]; 44 | } 45 | for (int i = 1; i <= n; i++) 46 | cout << dp[i].count() << ' '; 47 | } -------------------------------------------------------------------------------- /src/2143 - Reachability Queries.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Reachability Queries 3 | Problem Link: https://cses.fi/problemset/task/2143 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 5e4+5; 13 | vector> dp(mxN); 14 | vector adj[mxN], adj2[mxN], cond[mxN]; 15 | vector v; 16 | int comp[mxN]; 17 | int cnt = 0; 18 | int vis[mxN]; 19 | 20 | void dfs(int s, vector adj[]) { 21 | if (vis[s]) return; 22 | vis[s] = 1; 23 | for (auto i: adj[s]) 24 | dfs(i, adj); 25 | v.push_back(s); 26 | } 27 | 28 | void dfs2(int s, int cnt) { 29 | if (comp[s]) return; 30 | comp[s] = cnt; 31 | for (auto i: adj2[s]) 32 | dfs2(i, cnt); 33 | } 34 | 35 | 36 | 37 | signed main(){ 38 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 39 | #ifdef LOCAL 40 | freopen("input.txt", "r" , stdin); 41 | freopen("output.txt", "w", stdout); 42 | #endif 43 | 44 | int n, m, t; cin >> n >> m >> t; 45 | for (int i = 0; i < m; i++) { 46 | int x, y; cin >> x >> y; 47 | adj[x].push_back(y); 48 | adj2[y].push_back(x); 49 | } 50 | //topological sort 51 | for (int i = 1; i <= n; i++) { 52 | if (!vis[i]) 53 | dfs(i, adj); 54 | } 55 | //condensing SCCs 56 | reverse(v.begin(), v.end()); 57 | for (auto i: v) { 58 | if (!comp[i]) { 59 | dfs2(i, ++cnt); 60 | } 61 | } 62 | //condesed graph. 63 | for (int i = 1; i <= n; i++) { 64 | for (auto j: adj[i]) if (comp[i] != comp[j]) { 65 | cond[comp[i]].push_back(comp[j]); 66 | } 67 | } 68 | 69 | memset(vis, 0, sizeof vis); 70 | v.clear(); 71 | //topological sort of condensed graphs 72 | for (int i = 1; i <= cnt; i++) { 73 | if (!vis[i]) 74 | dfs(i, cond); 75 | } 76 | 77 | for (auto s: v) { 78 | dp[s][s] = 1; 79 | for (auto i: cond[s]) 80 | dp[s] |= dp[i]; 81 | } 82 | 83 | while (t--) { 84 | int x, y; cin >> x >> y; 85 | cout << (dp[comp[x]][comp[y]] ? "YES" : "NO") << endl; 86 | } 87 | 88 | } -------------------------------------------------------------------------------- /src/2162 - Josephus Problem I.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Josephus Problem I 3 | Problem Link: https://cses.fi/problemset/task/2162 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int n; cin>>n; 20 | int a = 1, b = 0; 21 | while(n > 0) { 22 | for (int i = 2; i <= n; i+=2) { 23 | cout<>= 1; 29 | } 30 | } -------------------------------------------------------------------------------- /src/2163 - Josephus Problem II.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Josephus Problem II 3 | Problem Link: https://cses.fi/problemset/task/2163 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | #include 8 | using namespace __gnu_pbds; 9 | using namespace std; 10 | 11 | typedef tree,rb_tree_tag, tree_order_statistics_node_update> indexed_set; 12 | #define int long long 13 | #define endl '\n' 14 | 15 | signed main(){ 16 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 17 | #ifdef LOCAL 18 | freopen("input.txt", "r" , stdin); 19 | freopen("output.txt", "w", stdout); 20 | #endif 21 | 22 | indexed_set s; 23 | int n,k; cin>>n>>k; 24 | for (int i = 1; i <= n; i++) 25 | s.insert(i); 26 | 27 | int ind = k%n; 28 | while(n--) { 29 | auto y = s.find_by_order(ind); 30 | cout<<*y<<' '; 31 | s.erase(y); 32 | if (n) ind = (ind%n + k)%n; 33 | } 34 | } -------------------------------------------------------------------------------- /src/2164 - Josephus Queries.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Josephus Queries 3 | Problem Link: https://cses.fi/problemset/task/2164 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | int solve(int n, int k) { 13 | // cerr< n) return 2*k%n; 18 | else return 2*k; 19 | } 20 | 21 | int c = solve(n>>1, k - (n+1)/2); 22 | if (n&1) return 2*c + 1; 23 | else return 2*c - 1; 24 | } 25 | 26 | signed main() { 27 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 28 | #ifdef LOCAL 29 | freopen("input.txt", "r" , stdin); 30 | freopen("output.txt", "w", stdout); 31 | #endif 32 | 33 | int t; cin>>t; 34 | while(t--) { 35 | int n, k; cin>>n>>k; 36 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | void solve(int a, int b, int c, int n) { 13 | if (n == 0) 14 | return; 15 | solve(a, c, b, n-1); 16 | cout<>n; 28 | cout<< (1< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | #define lsum first 12 | #define sum second 13 | 14 | 15 | const int N = 1LL<<19; 16 | pair tree[N]; 17 | 18 | int n; 19 | void upd(int k, int x){ 20 | k+=n; 21 | tree[k] = {x, x}; k>>=1; 22 | while(k>=1){ 23 | tree[k].sum = tree[2*k].sum + tree[2*k+1].sum; 24 | tree[k].lsum = max(tree[2*k].lsum, tree[2*k].sum + tree[2*k+1].lsum); 25 | k>>=1; 26 | } 27 | } 28 | int qry(int a, int b){ 29 | a+=n, b+=n; 30 | pair x = {0, 0}, y = {0, 0}; 31 | while(a<=b){ 32 | if (a&1) 33 | x = {max(x.lsum, x.sum + tree[a].lsum), x.sum + tree[a++].sum}; 34 | if (~b&1) 35 | y = {max(tree[b].lsum, tree[b].sum + y.lsum), y.sum + tree[b--].sum}; 36 | a>>=1, b>>=1; 37 | } 38 | return max(x.lsum, x.sum + y.lsum); 39 | } 40 | signed main(){ 41 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 42 | #ifdef LOCAL 43 | freopen("input.txt", "r" , stdin); 44 | freopen("output.txt", "w", stdout); 45 | #endif 46 | 47 | int t; cin>>n>>t; 48 | for (int i = 0; i < n; i++) { 49 | int x; cin>>x; 50 | upd(i, x); 51 | } 52 | while(t--) { 53 | int x, a, b; cin>>x>>a>>b; 54 | if (x == 1) 55 | upd(a-1, b); 56 | else 57 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | #define F first 12 | #define S second 13 | 14 | map mp; 15 | const int N = 2e5+1; 16 | int T[N+1]={0}; 17 | void update(int n, int x, int val){ 18 | for(;x<=n; x+=x&-x) T[x]+=val; 19 | } 20 | int query(int x){ 21 | int s=0; 22 | for(;x>0;x-=x&-x) s+=T[x]; 23 | return s; 24 | } 25 | 26 | bool comp(pair,int> a, pair,int> b) { 27 | if (a.F.F == b.F.F) 28 | return a.F.S > b.F.S; 29 | return a.F.F < b.F.F; 30 | } 31 | 32 | signed main(){ 33 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 34 | #ifdef LOCAL 35 | freopen("input.txt", "r" , stdin); 36 | freopen("output.txt", "w", stdout); 37 | #endif 38 | 39 | int n; cin>>n; 40 | set b; 41 | vector, int>> v(n); 42 | for (int i = 0; i < n; i++) { 43 | int x, y; cin>>x>>y; 44 | v[i].S = i; 45 | v[i].F = {x, y}; 46 | b.insert(y); 47 | } 48 | int cnt = 0; 49 | for (auto i: b) { 50 | mp[i] = ++cnt; 51 | } 52 | sort(v.begin(), v.end(), comp); 53 | update(cnt, mp[v[n-1].F.S], 1); 54 | int ans[n] = {0}; 55 | for (int i = n-2; i >= 0; i--) { 56 | ans[v[i].S] += query(mp[v[i].F.S]); 57 | update(cnt, mp[v[i].F.S], 1); 58 | } 59 | 60 | for (int i = 0; i < n; i++) 61 | cout<<(ans[i] > 0)<<' '; 62 | 63 | memset(ans, 0, sizeof ans); 64 | memset(T, 0, sizeof T); 65 | update(cnt, 1, 1); 66 | update(cnt, mp[v[0].F.S] + 1, -1); 67 | for (int i = 1; i < n; i++) { 68 | ans[v[i].S] += query(mp[v[i].F.S]); 69 | update(cnt, 1, 1); 70 | update(cnt, mp[v[i].F.S] + 1, -1); 71 | } 72 | cout< 0)<<' '; 75 | } -------------------------------------------------------------------------------- /src/2169 - Nested Ranges Count.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Nested Ranges Count 3 | Problem Link: https://cses.fi/problemset/task/2169 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | #define F first 12 | #define S second 13 | 14 | map mp; 15 | const int N = 2e5+1; 16 | int T[N+1]={0}; 17 | void update(int n, int x, int val){ 18 | for(;x<=n; x+=x&-x) T[x]+=val; 19 | } 20 | int query(int x){ 21 | int s=0; 22 | for(;x>0;x-=x&-x) s+=T[x]; 23 | return s; 24 | } 25 | 26 | bool comp(pair,int> a, pair,int> b) { 27 | if (a.F.F == b.F.F) 28 | return a.F.S > b.F.S; 29 | return a.F.F < b.F.F; 30 | } 31 | 32 | signed main(){ 33 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 34 | #ifdef LOCAL 35 | freopen("input.txt", "r" , stdin); 36 | freopen("output.txt", "w", stdout); 37 | #endif 38 | 39 | int n; cin>>n; 40 | set b; 41 | vector, int>> v(n); 42 | for (int i = 0; i < n; i++) { 43 | int x, y; cin>>x>>y; 44 | v[i].S = i; 45 | v[i].F = {x, y}; 46 | b.insert(y); 47 | } 48 | int cnt = 0; 49 | for (auto i: b) { 50 | mp[i] = ++cnt; 51 | } 52 | sort(v.begin(), v.end(), comp); 53 | update(cnt, mp[v[n-1].F.S], 1); 54 | int ans[n] = {0}; 55 | for (int i = n-2; i >= 0; i--) { 56 | ans[v[i].S] += query(mp[v[i].F.S]); 57 | update(cnt, mp[v[i].F.S], 1); 58 | } 59 | 60 | for (int i = 0; i < n; i++) 61 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e5+5; 13 | vector> ans; 14 | int flag = 0, cnt = 0; 15 | vector adj[mxN]; 16 | int vis[mxN], low[mxN]; 17 | 18 | void dfs(int s, int p) { 19 | vis[s] = ++cnt; 20 | low[s] = vis[s]; 21 | for (auto i: adj[s]) { 22 | if (i != p) { 23 | if (vis[i]) { 24 | low[s] = min(low[s], vis[i]); 25 | if (vis[i] > vis[s]) 26 | ans.push_back({i, s}); 27 | } 28 | else { 29 | dfs(i, s); 30 | ans.push_back({s, i}); 31 | low[s] = min(low[i], low[s]); 32 | if (low[i] > vis[s]) 33 | flag = 1; 34 | } 35 | } 36 | } 37 | } 38 | 39 | 40 | 41 | signed main(){ 42 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 43 | #ifdef LOCAL 44 | freopen("input.txt", "r" , stdin); 45 | freopen("output.txt", "w", stdout); 46 | #endif 47 | 48 | int n, m; cin>>n>>m; 49 | for (int i = 0; i < m; i++) { 50 | int x, y; cin>>x>>y; 51 | adj[x].push_back(y); 52 | adj[y].push_back(x); 53 | } 54 | dfs(1, 0); 55 | if (flag == 1) return cout<<"IMPOSSIBLE", 0; 56 | for (int i = 1; i <= n; i++) 57 | if (!vis[i]) 58 | return cout<<"IMPOSSIBLE", 0; 59 | for (auto [i, j]: ans) 60 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | int dp[1003][1030], n,m; 13 | const int md = 1e9+7; 14 | 15 | void solve(int x = 0, int y = 0, int mask = 0, int next_mask = 0) { 16 | if (x == n) 17 | return; 18 | if (y >= m) 19 | (dp[x+1][next_mask] += dp[x][mask])%=md; 20 | else 21 | { 22 | int my_mask = 1 << y; 23 | if (mask & my_mask) 24 | solve (x, y+1, mask, next_mask); 25 | else 26 | { 27 | solve (x, y+1, mask, next_mask | my_mask); 28 | if (y+1 < m && ! (mask & (my_mask << 1))) 29 | solve (x, y+2, mask, next_mask); 30 | } 31 | } 32 | } 33 | 34 | signed main(){ 35 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 36 | #ifdef LOCAL 37 | freopen("input.txt", "r" , stdin); 38 | freopen("output.txt", "w", stdout); 39 | #endif 40 | 41 | cin>>m>>n; 42 | dp[0][0] = 1; 43 | for (int i = 0; i < n; i++) { 44 | for (int j = 0; j < (1< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int md = 1e9+7; 13 | 14 | int exp(int x, int y, int md){ 15 | int ans = 1; 16 | x = x%md; 17 | while (y > 0) { 18 | if (y&1) 19 | ans = ans*x%md; 20 | y = y>>1; 21 | x = x*x%md; 22 | } 23 | return ans; 24 | } 25 | 26 | signed main(){ 27 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 28 | #ifdef LOCAL 29 | freopen("input.txt", "r" , stdin); 30 | freopen("output.txt", "w", stdout); 31 | #endif 32 | 33 | int n; cin>>n; 34 | int c[3] = {1, 1, 1}; 35 | int flag = 0; 36 | int sq = 1, num = 1, d = 1; 37 | for (int i = 0; i < n; i++) { 38 | int x, y; cin>>x>>y; 39 | c[0] = c[0]*(y+1)%md; 40 | int gsum = (exp(x, y+1, md) - 1 + md)%md*exp(x-1, md-2, md)%md; 41 | c[1] = c[1]*gsum%md; 42 | sq = sq*exp(x, y/2, md)%md; 43 | num = num*exp(x, y, md)%md; 44 | if ((y&1) && flag == 0) { 45 | d = d*((y+1)/2)%(md-1); 46 | flag = 1; 47 | } 48 | else 49 | d = d*(y+1)%(md-1); 50 | } 51 | //now two cases for product: 52 | //if all powers are even, then ans = sq^d 53 | //if at least power is odd, the ans = num^(d/2) [Use Fermat's little theorem] 54 | if (flag == 1) 55 | c[2] = exp(num, d, md); 56 | else 57 | c[2] = exp(sq, d, md); 58 | 59 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 2e5+5; 13 | int dp[mxN]; 14 | signed main(){ 15 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 16 | #ifdef LOCAL 17 | freopen("input.txt", "r" , stdin); 18 | freopen("output.txt", "w", stdout); 19 | #endif 20 | 21 | int n; cin>>n; 22 | int a[n+1] = {0}; 23 | for (int i = 1; i <= n; i++) 24 | cin>>a[i]; 25 | sort(a, a+n+1); 26 | dp[0] = 1; 27 | for (int i = 1; i <= n; i++) { 28 | if (dp[i-1] < a[i]) return cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int INF = 1LL<<60; 13 | signed main(){ 14 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 15 | #ifdef LOCAL 16 | freopen("input.txt", "r" , stdin); 17 | freopen("output.txt", "w", stdout); 18 | #endif 19 | 20 | int n,k; cin>>n>>k; 21 | //inclusion-exclusion 22 | int ans = 0; 23 | int a[k]; 24 | for (int i = 0; i < k; i++) 25 | cin>>a[i]; 26 | 27 | for (int i = 1; i < 1<>j&1) { 34 | if (z >= n/a[j] + 1) { 35 | z = INF; 36 | break; 37 | } 38 | z = z*a[j]; 39 | } 40 | } 41 | y /= z; 42 | ans += x*y; 43 | } 44 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e6+6; 13 | const int md = 1e9+7; 14 | int F[mxN], I[mxN]; 15 | 16 | int exp(int x, int y, int md){ 17 | int ans = 1; 18 | x = x%md; 19 | while (y > 0) { 20 | if (y&1) 21 | ans = ans*x%md; 22 | y = y>>1; 23 | x = x*x%md; 24 | } 25 | return ans; 26 | } 27 | 28 | signed main(){ 29 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 30 | #ifdef LOCAL 31 | freopen("input.txt", "r" , stdin); 32 | freopen("output.txt", "w", stdout); 33 | #endif 34 | 35 | int n; cin>>n; 36 | string s; cin>>s; 37 | if (n&1) return cout<<0, 0; 38 | n >>= 1; 39 | int c = 0, k = s.size(); 40 | int x = 0, y = 0; 41 | for (int i = 0; i < k; i++) { 42 | if (s[i] == ')') c--, y++; 43 | else if (s[i] == '(') c++, x++; 44 | if (c < 0) return cout<<0, 0; 45 | } 46 | if (x > n) return cout<<0, 0; 47 | if (x == n) return cout<<1, 0; 48 | F[0] = 1, I[0] = 1; 49 | for (int i = 1; i < mxN; i++) { 50 | F[i] = i*F[i-1]%md; 51 | I[i] = exp(F[i], md-2, md); 52 | } 53 | //total ways from remaining brackets 54 | int ans = F[2*n-x-y]*I[n-x]%md*I[n-y]%md; 55 | //subtracting invalid ways: taking more left brakcets than right 56 | ans = (ans - F[2*n-x-y]*I[n-x-1]%md*I[n-y+1]%md + md)%md; 57 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int t; cin>>t; 20 | while (t--) { 21 | int x1, y1, x2, y2, x3, y3; 22 | cin>>x1>>y1>>x2>>y2>>x3>>y3; 23 | //cross product 24 | int cp = (x2-x1)*(y3-y1) - (y2-y1)*(x3-x1); 25 | if (cp < 0) cout<<"RIGHT"< 0) cout<<"LEFT"< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | #define P complex 12 | #define X real() 13 | #define Y imag() 14 | 15 | int cross(P a, P b, P c) { 16 | P u = b - a; 17 | P v = c - a; 18 | return (conj(u)*v).Y; 19 | } 20 | 21 | bool comp(const P &a, const P &b) { 22 | return (a.X == b.X) ? (a.Y < b.Y) : (a.X < b.X); 23 | } 24 | 25 | bool mid(P a, P b, P c) { 26 | vector

v = {a, b, c}; 27 | sort(v.begin(), v.end(), comp); 28 | return (v[1] == c); 29 | } 30 | 31 | int sgn(int x) { 32 | return (x > 0) - (x < 0); 33 | } 34 | 35 | bool check(P a, P b, P c, P d) { 36 | int cp1 = cross(a, b, c); 37 | int cp2 = cross(a, b, d); 38 | int cp3 = cross(c, d, a); 39 | int cp4 = cross(c, d, b); 40 | if (cp1 == 0 && mid(a, b, c)) return 1; 41 | if (cp2 == 0 && mid(a, b, d)) return 1; 42 | if (cp3 == 0 && mid(c, d, a)) return 1; 43 | if (cp4 == 0 && mid(c, d, b)) return 1; 44 | if (sgn(cp1) != sgn(cp2) && sgn(cp3) != sgn(cp4)) return 1; 45 | return 0; 46 | } 47 | 48 | 49 | signed main(){ 50 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 51 | #ifdef LOCAL 52 | freopen("input.txt", "r" , stdin); 53 | freopen("output.txt", "w", stdout); 54 | #endif 55 | 56 | int t; cin>>t; 57 | while (t--) { 58 | int x, y; 59 | P a, b, c, d; 60 | cin >> x >> y; a = {x, y}; 61 | cin >> x >> y; b = {x, y}; 62 | cin >> x >> y; c = {x, y}; 63 | cin >> x >> y; d = {x, y}; 64 | cout << (check(a, b, c, d) ? "YES" : "NO") << endl; 65 | } 66 | } -------------------------------------------------------------------------------- /src/2191 - Polygon Area.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Polygon Area 3 | Problem Link: https://cses.fi/problemset/task/2191 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | #define X first 13 | #define Y second 14 | 15 | signed main(){ 16 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 17 | #ifdef LOCAL 18 | freopen("input.txt", "r" , stdin); 19 | freopen("output.txt", "w", stdout); 20 | #endif 21 | 22 | int n; cin>>n; 23 | pair a[n]; 24 | for (int i = 0; i < n; i++) 25 | cin>>a[i].X>>a[i].Y; 26 | int ans = 0; 27 | //shoelace formula 28 | for (int i = 0; i < n; i ++) { 29 | ans += (a[i].X*a[(i+1)%n].Y - a[(i+1)%n].X*a[i].Y); 30 | } 31 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | #define P complex 12 | #define X real() 13 | #define Y imag() 14 | 15 | const int INF = 1e9 + 7; 16 | 17 | int cross(P a, P b, P c) { 18 | P u = b - a; 19 | P v = c - a; 20 | int cp = (conj(u)*v).Y; 21 | return (cp > 0) - (cp < 0); 22 | } 23 | 24 | bool comp(const P &a, const P &b) { 25 | return (a.X == b.X) ? (a.Y < b.Y) : (a.X < b.X); 26 | } 27 | 28 | bool mid(P a, P b, P c) { 29 | vector

v = {a, b, c}; 30 | sort(v.begin(), v.end(), comp); 31 | return (v[1] == c); 32 | } 33 | 34 | bool check(P a, P b, P c, P d) { 35 | int cp1 = cross(a, b, c); 36 | int cp2 = cross(a, b, d); 37 | int cp3 = cross(c, d, a); 38 | int cp4 = cross(c, d, b); 39 | if (cp1 * cp2 < 0 && cp3 * cp4 < 0) return 1; 40 | if (cp3 == 0 && mid(c, d, a) && cp4 < 0) return 1; 41 | if (cp4 == 0 && mid(c, d, b) && cp3 < 0) return 1; 42 | return 0; 43 | } 44 | 45 | 46 | signed main(){ 47 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 48 | #ifdef LOCAL 49 | freopen("input.txt", "r" , stdin); 50 | freopen("output.txt", "w", stdout); 51 | #endif 52 | 53 | //https://en.wikipedia.org/wiki/Point_in_polygon#Ray_casting_algorithm 54 | int n, m; cin >> n >> m; 55 | vector

v; 56 | for (int i = 0; i < n; i++) { 57 | int x, y; cin >> x >> y; 58 | v.push_back({x, y}); 59 | } 60 | v.push_back(v[0]); 61 | while (m--) { 62 | int x, y; cin >> x >> y; 63 | P a = {x, y}; 64 | P b = {INF, INF}; 65 | int cnt = 0; 66 | int flag = 0; 67 | for (int i = 0; i < n; i++) { 68 | int cp = cross(v[i], v[i+1], a); 69 | if (cp == 0 && mid(v[i], v[i+1], a)) { 70 | flag = 1; 71 | break; 72 | } 73 | cnt += check(v[i], v[i+1], a, b); 74 | } 75 | if (flag) cout << "BOUNDARY" << endl; 76 | else cout << (cnt & 1 ? "INSIDE" : "OUTSIDE") << endl; 77 | } 78 | } -------------------------------------------------------------------------------- /src/2193 - Polygon Lattice Points.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Polygon Lattice Points 3 | Problem Link: https://cses.fi/problemset/task/2193 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | #define P complex 12 | #define X real() 13 | #define Y imag() 14 | 15 | 16 | 17 | signed main(){ 18 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 19 | #ifdef LOCAL 20 | freopen("input.txt", "r" , stdin); 21 | freopen("output.txt", "w", stdout); 22 | #endif 23 | 24 | //pick's theorem + https://math.stackexchange.com/a/301895/530789 25 | int n; cin >> n; 26 | vector

v(n); 27 | for (int i = 0; i < n; i++) { 28 | int x, y; cin >> x >> y; 29 | v[i] = {x, y}; 30 | } 31 | v.push_back(v[0]); 32 | int area = 0; 33 | int b = 0; 34 | for (int i = 0; i < n; i++) { 35 | P x = v[i], y = v[i+1]; 36 | area += (conj(x) * y).Y; 37 | P z = y - x; 38 | int g = __gcd(z.X, z.Y); 39 | b += abs(g); 40 | } 41 | //2*area = 2*a + b - 2 42 | int a = abs(area) - b + 2; 43 | cout << a/2 << ' ' << b; 44 | } -------------------------------------------------------------------------------- /src/2194 - Minimum Euclidean Distance.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Minimum Euclidean Distance 3 | Problem Link: https://cses.fi/problemset/task/2194 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | #define P pair 12 | #define X first 13 | #define Y second 14 | 15 | int norm(P a, P b) { 16 | return (b.X - a.X) * (b.X - a.X) + (b.Y - a.Y) * (b.Y - a.Y); 17 | } 18 | 19 | signed main(){ 20 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 21 | #ifdef LOCAL 22 | freopen("input.txt", "r" , stdin); 23 | freopen("output.txt", "w", stdout); 24 | #endif 25 | 26 | int n; cin>>n; 27 | vector

v(n); 28 | int d = LLONG_MAX; 29 | for (int i = 0; i < n; i++) { 30 | int x, y; cin >> x >> y; 31 | v[i] = {x, y}; 32 | } 33 | sort(v.begin(), v.end()); 34 | set

s = {{v[0].Y, v[0].X}}; 35 | int j = 0; 36 | for (int i = 1; i < n; i++) { 37 | auto it = s.begin(); 38 | int dd = ceil(sqrt(d)); 39 | while (j < i && v[j].X < v[i].X - dd) { 40 | s.erase({v[j].Y, v[j].X}); 41 | j++; 42 | } 43 | 44 | auto l = s.lower_bound({v[i].Y - dd, 0}); 45 | auto r = s.upper_bound({v[i].Y + dd, 0}); 46 | for (auto it = l; it != r; it++) { 47 | d = min(d, norm({it->Y, it->X}, v[i])); 48 | } 49 | s.insert({v[i].Y, v[i].X}); 50 | } 51 | cout << d; 52 | } -------------------------------------------------------------------------------- /src/2195 - Convex Hull.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Convex Hull 3 | Problem Link: https://cses.fi/problemset/task/2195 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | #define P complex 12 | #define X real() 13 | #define Y imag() 14 | 15 | int cross(P &a, P &b, P &c) { 16 | P u = c - b; 17 | P v = a - b; 18 | int cp = (conj(u) * v).Y; 19 | return (cp > 0) - (cp < 0); 20 | } 21 | 22 | vector

hull(vector

&v) { 23 | vector

ans = {v[0]}; 24 | for (int i = 1; i < v.size(); i++) { 25 | while (ans.size() > 1) { 26 | P b = ans.back(); 27 | ans.pop_back(); 28 | P a = ans.back(); 29 | P c = v[i]; 30 | if (cross(a, b, c) != 1) { 31 | ans.push_back(b); 32 | break; 33 | } 34 | } 35 | ans.push_back(v[i]); 36 | } 37 | return ans; 38 | } 39 | 40 | signed main(){ 41 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 42 | #ifdef LOCAL 43 | freopen("input.txt", "r" , stdin); 44 | freopen("output.txt", "w", stdout); 45 | #endif 46 | 47 | int n; cin >> n; 48 | vector

v(n); 49 | for (int i = 0; i < n; i++) { 50 | int x, y; cin >> x >> y; 51 | v[i] = {x, y}; 52 | } 53 | sort(v.begin(), v.end(), 54 | [] (const P &a, const P &b) { 55 | return (a.X == b.X) ? (a.Y < b.Y) : (a.X < b.X); 56 | }); 57 | vector

v1 = hull(v); 58 | 59 | sort(v.begin(), v.end(), 60 | [] (const P &a, const P &b) { 61 | return (a.X == b.X) ? (a.Y > b.Y) : (a.X > b.X); 62 | }); 63 | vector

v2 = hull(v); 64 | for (int i = 1; i < v2.size(); i++) { 65 | if (v2[i] == v1[0]) break; 66 | v1.push_back(v2[i]); 67 | } 68 | cout << v1.size() << endl; 69 | for (auto i: v1) 70 | cout << i.X << " " << i.Y << endl; 71 | } -------------------------------------------------------------------------------- /src/2205 - Gray Code.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Gray Code 3 | Problem Link: https://cses.fi/problemset/task/2205 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int n; cin>>n; 20 | int a[1<>= 1; 37 | } 38 | reverse(s.begin(), s.end()); 39 | for (int i = 0; i < n - s.size(); i++) 40 | cout<<0; 41 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | #define F first 12 | #define S second 13 | 14 | 15 | const int N = 1LL<<19; 16 | const int INF = 1LL<<60; 17 | pair tree[N]; 18 | 19 | int n; 20 | void upd(int k, int x){ 21 | k+=n; 22 | tree[k] = {x, x}; k>>=1; 23 | int dist = 1; 24 | while(k>=1){ 25 | tree[k].F = min(tree[2*k].F, tree[2*k+1].F + dist); 26 | tree[k].S = min(tree[2*k+1].S, tree[2*k].S + dist); 27 | dist<<=1; 28 | k>>=1; 29 | } 30 | } 31 | 32 | pair qry(int a, int b){ 33 | a+=n, b+=n; 34 | pair x = {INF, INF}, y = {INF, INF}; 35 | int x_dist = 0; 36 | int y_dist = 0; 37 | int dist = 1; 38 | while(a<=b){ 39 | if (a&1) { 40 | x.F = min(x.F, tree[a].F + x_dist); 41 | x.S = min(tree[a].S, x.S + dist); 42 | a++; 43 | x_dist += dist; 44 | } 45 | if (~b&1) { 46 | y.F = min(tree[b].F, y.F + dist); 47 | y.S = min(y.S, tree[b].S + y_dist); 48 | b--; 49 | y_dist += dist; 50 | } 51 | a>>=1, b>>=1, dist<<=1; 52 | } 53 | return {min(x.F, y.F + x_dist), min(y.S, x.S + y_dist)}; 54 | } 55 | 56 | signed main(){ 57 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 58 | #ifdef LOCAL 59 | freopen("input.txt", "r" , stdin); 60 | freopen("output.txt", "w", stdout); 61 | #endif 62 | 63 | int nn, t; cin>>nn>>t; 64 | n = 1<<((int) ceil(log2(nn))); 65 | for (int i = 0; i < N; i++) 66 | tree[i] = {INF, INF}; 67 | for (int i = 0; i < nn; i++) { 68 | int x; cin>>x; 69 | upd(i, x); 70 | } 71 | while(t--) { 72 | int c; cin>>c; 73 | if (c == 1) { 74 | int a, b; cin>>a>>b; 75 | upd(a-1, b); 76 | } 77 | else { 78 | int a; cin>>a; 79 | pair x = qry(0, a-1); 80 | pair y = qry(a-1, nn-1); 81 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e6+6; 13 | 14 | vector dp = {0, 0, 0}; 15 | int mex(vector v) { 16 | set s; 17 | for (auto i: v) 18 | s.insert(i); 19 | for (int i = 0; i < mxN; i++) { 20 | if (s.count(i) == 0) return i; 21 | } 22 | } 23 | 24 | signed main(){ 25 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 26 | #ifdef LOCAL 27 | freopen("input.txt", "r" , stdin); 28 | freopen("output.txt", "w", stdout); 29 | #endif 30 | 31 | int t; cin>>t; 32 | for (int i = 3; i < 2000; i++) { 33 | vector v; 34 | for (int j = 1; i-j > j; j++) { 35 | v.push_back(dp[j]^dp[i-j]); 36 | } 37 | dp.push_back(mex(v)); 38 | } 39 | while(t--) { 40 | int n; cin>>n; 41 | if (n >= 2000) cout<<"first"< 0 ? "first" : "second")< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int t; cin>>t; 20 | while (t--) { 21 | int n; cin>>n; 22 | int ans = 0; 23 | for (int i = 0; i < n; i++) { 24 | int x; cin>>x; 25 | if (x&1) ans = 1; 26 | } 27 | cout<<(ans ? "first" : "second")< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int md = 1e9+7; 13 | 14 | int exp(int x, int y, int md){ 15 | int ans = 1; 16 | x = x%md; 17 | while (y > 0) { 18 | if (y&1) 19 | ans = ans*x%md; 20 | y = y>>1; 21 | x = x*x%md; 22 | } 23 | return ans; 24 | } 25 | 26 | signed main(){ 27 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 28 | #ifdef LOCAL 29 | freopen("input.txt", "r" , stdin); 30 | freopen("output.txt", "w", stdout); 31 | #endif 32 | 33 | int n, m; cin>>n>>m; 34 | //burnside's lemma 35 | //no. of objects = avg. no of symmetrical pictures over all symmetries. 36 | int ans = 0; 37 | for (int i = 0; i < n; i++) { 38 | ans = (ans + exp(m, __gcd(i, n), md)) % md; 39 | } 40 | ans = ans * exp(n, md-2, md) % md; 41 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int md = 1e9+7; 13 | 14 | int exp(int x, int y, int md){ 15 | int ans = 1; 16 | x = x%md; 17 | while (y > 0) { 18 | if (y&1) 19 | ans = ans*x%md; 20 | y = y>>1; 21 | x = x*x%md; 22 | } 23 | return ans; 24 | } 25 | 26 | signed main(){ 27 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 28 | #ifdef LOCAL 29 | freopen("input.txt", "r" , stdin); 30 | freopen("output.txt", "w", stdout); 31 | #endif 32 | 33 | int n; cin>>n; 34 | //burnside's lemma: https://youtu.be/D0d9bYZ_qDY 35 | //no. of objects = avg. no of symmetrical pictures over all symmetries. 36 | int n0 = n*n; 37 | int n90 = 1; 38 | int n180 = 1; 39 | if (n > 1 && (n&1)) { 40 | n90 = (n+3)*(n-1)/4 - (n-1)/2 + 1; 41 | n180 = (n+3)*(n-1)/2 - (n-1) + 1; 42 | } 43 | else if (n&1^1) { 44 | n90 = n*(n+2)/4 - n/2; 45 | n180 = n*(n+2)/2 - n; 46 | } 47 | int ans = 0; 48 | ans = (ans + exp(2, n0, md)) % md; //0 deg 49 | ans = (ans + exp(2, n90, md)) % md; //90 deg 50 | ans = (ans + exp(2, n180, md)) % md; //180 deg 51 | ans = (ans + exp(2, n90, md)) % md; //270 deg 52 | ans = ans * exp(4, md-2, md) % md; 53 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int n; cin>>n; 20 | int l = 1; 21 | int ind[n+1] = {0}; 22 | for (int i = 1; i <= n; i++) { 23 | int x; cin>>x; 24 | ind[x] = i; 25 | } 26 | int c = 1; 27 | for (int i = 1; i <= n; i++) { 28 | if (l > ind[i]) 29 | c++; 30 | l = ind[i]; 31 | } 32 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | signed main(){ 13 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 14 | #ifdef LOCAL 15 | freopen("input.txt", "r" , stdin); 16 | freopen("output.txt", "w", stdout); 17 | #endif 18 | 19 | int n,m; cin>>n>>m; 20 | int l = 1; 21 | int ind[n+2] = {0}, a[n+1] = {0}; 22 | ind[n+1] = n+1; 23 | for (int i = 1; i <= n; i++) { 24 | int x; cin>>x; 25 | ind[x] = i; 26 | a[i] = x; 27 | } 28 | int c = 1; 29 | for (int i = 1; i <= n; i++) { 30 | if (l > ind[i]) 31 | c++; 32 | l = ind[i]; 33 | } 34 | while(m--) { 35 | int x,y; cin>>x>>y; 36 | int r = a[x], s = a[y]; 37 | swap(a[x], a[y]); 38 | if (ind[r-1] <= ind[r] && ind[r-1] > y) c++; 39 | if (ind[r-1] > ind[r] && ind[r-1] <= y) c--; 40 | if (ind[r] <= ind[r+1] && y > ind[r+1]) c++; 41 | if (ind[r] > ind[r+1] && y <= ind[r+1]) c--; 42 | ind[r] = y; 43 | if (ind[s-1] <= ind[s] && ind[s-1] > x) c++; 44 | if (ind[s-1] > ind[s] && ind[s-1] <= x) c--; 45 | if (ind[s] <= ind[s+1] && x > ind[s+1]) c++; 46 | if (ind[s] > ind[s+1] && x <= ind[s+1]) c--; 47 | ind[s] = x; 48 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | int xpow(int x, unsigned int y){ 13 | int res=1; 14 | while(y>0){ 15 | if (y&1) res= (res*x); y=y>>1; x=(x*x); 16 | } 17 | return res; 18 | } 19 | 20 | int solve(int x) { 21 | if (x < 0) return 0; 22 | if (x == 0) return 1; 23 | int flag = 1; 24 | while(flag) { 25 | flag = 0; 26 | for (int i = log10(x) - 1; i >= 0; i--) { 27 | int m = xpow(10, i); 28 | if (x/(m*10)%10 == x/m%10) { 29 | x = (x/m - 1)*m + (m-1); 30 | flag = 1; 31 | } 32 | } 33 | } 34 | int n = log10(x)+1; 35 | int dp[n+1][2] = {0}; //dp[n][0] = free, dp[n][1] = contrained 36 | dp[0][0] = 1, dp[0][1] = 1; 37 | int ans = 1; 38 | int m = 1; 39 | for (int i = 1; i < n; i++, m *= 10) { 40 | dp[i][0] = xpow(9, i); 41 | dp[i][1] = (x/m%10)*dp[i-1][0] + dp[i-1][1]; 42 | if (x/m%10 > x/(m*10)%10) dp[i][1] -= dp[i-1][0]; 43 | ans += dp[i][0]; 44 | } 45 | dp[n][1] = (x/m%10 - 1)*dp[n-1][0] + dp[n-1][1]; 46 | return ans + dp[n][1]; 47 | 48 | } 49 | 50 | signed main(){ 51 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 52 | #ifdef LOCAL 53 | freopen("input.txt", "r" , stdin); 54 | freopen("output.txt", "w", stdout); 55 | #endif 56 | 57 | int x, y; cin>>x>>y; 58 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e6+6; 13 | int dp[mxN][3]; 14 | 15 | const int md = 1e9+7; 16 | 17 | signed main(){ 18 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 19 | #ifdef LOCAL 20 | freopen("input.txt", "r" , stdin); 21 | freopen("output.txt", "w", stdout); 22 | #endif 23 | 24 | // _ _ 25 | // dp[i][1] = last blocks are separate | || | 26 | // _ _ 27 | // dp[i][2] = last blocks are fused | | 28 | 29 | // transition: 30 | // _ _ _ _ _ _ _ _ _ _ 31 | // _ _ | || | |_|| | | ||_| |_||_| |_ _| 32 | // | || | => | || |, | || |, | || |, | || |, | | | 33 | // _ _ _ _ _ _ 34 | // _ _ | | |_|_| |_ _| 35 | // | | => | |, | |, | | 36 | 37 | // dp[i][1] = dp[i-1][1]*4 + dp[i-1][2] 38 | // dp[i][2] = dp[i-1][1] + dp[i-1][2]*2 39 | 40 | 41 | dp[1][1] = dp[1][2] = 1; 42 | for (int i = 2; i < mxN; i++) { 43 | dp[i][1] = (dp[i-1][1]*4%md + dp[i-1][2])%md; 44 | dp[i][2] = (dp[i-1][1] + dp[i-1][2]*2%md)%md; 45 | } 46 | 47 | int t; cin>>t; 48 | while(t--) { 49 | int n; cin>>n; 50 | cout<<(dp[n][1] + dp[n][2])%md< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int mxN = 1e6+6; 13 | int spf[mxN]; 14 | 15 | void sieve() { 16 | spf[0] = 1; 17 | for (int i = 1; i < mxN; i++) 18 | spf[i] = i; 19 | for (int i = 2; i*i < mxN; i++) { 20 | if (spf[i] == i) { 21 | for (int j = i*i; j < mxN; j += i) { 22 | if (spf[j] == j) 23 | spf[j] = i; 24 | } 25 | } 26 | } 27 | } 28 | 29 | int cnt[mxN]; 30 | 31 | signed main(){ 32 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 33 | #ifdef LOCAL 34 | freopen("input.txt", "r" , stdin); 35 | freopen("output.txt", "w", stdout); 36 | #endif 37 | 38 | int n; cin>>n; 39 | int ans = 0; 40 | sieve(); 41 | for (int i = 0; i < n; i++) { 42 | int x; cin>>x; 43 | vector v; 44 | while (x > 1) { 45 | int y = spf[x]; 46 | v.push_back(y); 47 | while (x % y == 0) 48 | x /= y; 49 | } 50 | int k = v.size(); 51 | for (int s = 1; s < (1<>j&1) { 55 | p *= v[j]; 56 | } 57 | } 58 | int sgn = -1; 59 | if (__builtin_popcount(s)&1) sgn = 1; 60 | ans += sgn*cnt[p]; 61 | cnt[p]++; 62 | } 63 | } 64 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | const int md = 1e9+7; 13 | int B = 73; //Sheldon prime (lol) 14 | const int mxN = 1e6+6; 15 | int pB[mxN]; 16 | struct { 17 | int bit[mxN] = {0}; 18 | 19 | void update(int k, int x) { 20 | x %= md; 21 | if (x < md) x += md; 22 | for (; k < mxN; k += k&-k) { 23 | (bit[k] += x) %= md; 24 | } 25 | } 26 | 27 | int query(int k) { 28 | int s = 0; 29 | for (; k > 0; k -= k&-k) 30 | (s += bit[k]) %= md; 31 | return s; 32 | } 33 | } pre, suf; 34 | 35 | signed main(){ 36 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 37 | #ifdef LOCAL 38 | freopen("input.txt", "r" , stdin); 39 | freopen("output.txt", "w", stdout); 40 | #endif 41 | 42 | mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); 43 | B = uniform_int_distribution(73, 7337)(rng); 44 | 45 | int n, t; cin>>n>>t; 46 | string s; cin>>s; 47 | pB[0] = 1; 48 | for (int i = 1; i < mxN; i++) 49 | pB[i] = pB[i-1] * B % md; 50 | 51 | for (int i = 0; i < n; i++) { 52 | pre.update(i+1, (s[i]-'a'+1) * pB[i]); 53 | suf.update(i+1, (s[i]-'a'+1) * pB[n-i-1]); 54 | } 55 | while (t--) { 56 | int ch; cin>>ch; 57 | if (ch == 1) { 58 | int k; char x; 59 | cin>>k>>x; k--; 60 | pre.update(k+1, -(s[k]-'a'+1) * pB[k]); 61 | pre.update(k+1, (x-'a'+1) * pB[k]); 62 | suf.update(k+1, -(s[k]-'a'+1) * pB[n-k-1]); 63 | suf.update(k+1, (x-'a'+1) * pB[n-k-1]); 64 | s[k] = x; 65 | } 66 | else { 67 | int x, y; cin>>x>>y; 68 | int h1 = (pre.query((x+y)/2) - pre.query(x-1) + md) % md; 69 | int m1 = pB[x-1]; 70 | int h2 = (suf.query(y) - suf.query((x+y-1)/2) + md) % md; 71 | int m2 = pB[n-y]; 72 | cout << (h1 * m2 % md == h2 * m1 % md ? "YES" : "NO" ) << endl; 73 | } 74 | } 75 | } -------------------------------------------------------------------------------- /src/2428 - Subarray Distinct Values.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | Problem Name: Subarray Distinct Values 3 | Problem Link: https://cses.fi/problemset/task/2428 4 | Author: Sachin Srivastava (mrsac7) 5 | */ 6 | #include 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | map cnt; 13 | 14 | signed main(){ 15 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 16 | #ifdef LOCAL 17 | freopen("input.txt", "r" , stdin); 18 | freopen("output.txt", "w", stdout); 19 | #endif 20 | 21 | int k, n; cin>>n>>k; 22 | int a[n]; 23 | for (int i = 0; i < n; i++) 24 | cin>>a[i]; 25 | int l = 0, r = 0, c = 0, ans = 0; 26 | while(l < n) { 27 | while(r < n && c + (cnt[a[r]] == 0) <= k) { 28 | cnt[a[r]]++; 29 | c += (cnt[a[r]] == 1); 30 | r++; 31 | } 32 | ans += r-l; 33 | c -= (cnt[a[l]] == 1); 34 | cnt[a[l]]--, l++; 35 | } 36 | cout< 7 | using namespace std; 8 | 9 | #define int long long 10 | #define endl '\n' 11 | 12 | int xpow(int x, unsigned int y){ 13 | int res=1; 14 | while(y>0){ 15 | if (y&1) res= (res*x); y=y>>1; x=(x*x); 16 | } 17 | return res; 18 | } 19 | 20 | signed main(){ 21 | ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); 22 | #ifdef LOCAL 23 | freopen("input.txt", "r" , stdin); 24 | freopen("output.txt", "w", stdout); 25 | #endif 26 | 27 | int t; cin>>t; 28 | while(t--) { 29 | int n; cin>>n; 30 | int c = 1; 31 | for (int p = 9;; n -= p, c++, p = 9*xpow(10, c-1)*c) { 32 | if (n - p <= 0) break; 33 | } 34 | n--; 35 | int x = n/c; 36 | int y = n%c; 37 | int ans = xpow(10, c-1) + x; 38 | // cerr<