拼多多超越计划笔试-2个AC 一个98% 第四题不会
有没有大佬会第四题啊 是不是动态规划
//94%-飞行棋 int main() { int N,K; while(cin>>N) { cin>>K; vector<int>v(K,0); for(int i=0;i<K;i++) cin>>v[i]; int sum=0; int huitui=0; bool flag=false; for(int i=0;i<K;i++) { sum=sum+v[i]; if(sum==N) { flag=true; break; } else if(sum>N) { sum=N-(sum-N); huitui++; } else {} } if(flag==true) cout<<"paradox"<<endl; else cout<<N-sum<<" "<<huitui<<endl; } }
//2 100% #include <algorithm> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <iostream> #include <map> #include <queue> #include <set> #include <stack> #include <unordered_map> #include <vector> #define fir first #define se second #define ll long long #define pb push_back #define mp make_pair #define ull unsigned long long #define cl(a, b) memset(a, b, sizeof(a)) #define quickio(a) ios::sync_with_stdio(a) #define datatest() freopen("data.in", "r", stdin) #define makeans() freopen("data.out", "w", stdout) #define makedata() freopen("data.in", "w", stdout) #define pii pair<int, int> #define pll pair<ll, ll> #define pdd pair<double, double> using namespace std; const int maxn = 1e6 + 10; const int maxm = 1e6 + 10; const int inf = 0x3f3f3f3f; const ll mod = 1e9 + 7; const int maxblock = sqrt(maxn) + 10; const double eps = 1e-7; const ll INF = 1e16; int a[maxn][7]; int n; int root[maxn]; int num[maxn]; int dir[6][6] = {{0, 1, 2, 3, 4, 5}, {1, 5, 2, 3, 0, 4}, {2, 1, 5, 0, 4, 3}, {3, 1, 0, 5, 4, 2}, {4, 0, 2, 3, 5, 1}, {5, 4, 2, 3, 1, 0}}; int check(int posi, int posj) { int b[6]; for (int i = 0; i < 6; i++) b[i] = 0; for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { b[j] = a[posj][dir[i][j]]; } for (int j = 0; j < 4; j++) { int temp; temp = b[1]; b[1] = b[2]; b[2] = b[4]; b[4] = b[3]; b[3] = temp; int equal_flag = 1; for (int i = 0; i < 6; i++) { equal_flag &= (b[i] == a[posi][i]); } if (equal_flag) return 1; } } return 0; } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { for (int j = 0; j < 6; j++) { scanf("%d", &a[i][j]); } std::swap(a[i][1], a[i][5]); } int group_num = 0; for (int i = 1; i <= n; i++) root[i] = 0; for (int i = 1; i <= n; i++) num[i] = 0; for (int i = 1; i <= n; i++) { int find_flag = 0; for (int j = i - 1; j >= 1; j--) { if (root[j] && check(i, j)) { num[j]++; find_flag = 1; break; } } if (!find_flag) { root[i] = 1; num[i] = 1; group_num++; } } printf("%d\n", group_num); int cnt = 0; vector<int> res; for (int i = 1; i <= n; i++) { if (root[i]) { res.push_back(num[i]); } } std::sort(res.begin(), res.end()); std::reverse(res.begin(), res.end()); for (int i = 0; i < res.size(); i++) { if (i) printf(" %d", res[i]); else printf("%d", res[i]); } printf("\n"); return 0; }
int main() { scanf("%d %d %d", &n, &m, &t); for (int i = 1; i <= n; i++) { int x, y; scanf("%d %d", &x, &y); v1.emplace_back(y, x); } for (int i = 1; i <= m; i++) { int x, y; scanf("%d %d", &x, &y); v2.emplace_back(y, x); } std::sort(v1.begin(), v1.end()); std::sort(v2.begin(), v2.end()); int Min = 2e6; int cur = m - 1; int now_min = 2e6; if (t == 0) { printf("0\n"); return 0; } for (int i = 0; i < v1.size(); i++) { int y1 = v1[i].second; while (v1[i].first + v2[cur].first >= t && cur >= 0) { now_min = min(now_min, v2[cur].second); cur--; } Min = min(Min, y1 + now_min); if (v1[i].first >= t) { Min = min(Min, y1); } } cur = n - 1; now_min = 2e6; for (int i = 0; i < v2.size(); i++) { int y1 = v2[i].second; while (v2[i].first + v1[cur].first >= t && cur >= 0) { now_min = min(now_min, v1[cur].second); cur--; } Min = min(Min, y1 + now_min); if (v2[i].first >= t) { Min = min(Min, y1); } } if (Min == 2e6) Min = -1; printf("%d\n", Min); return 0; } /* 3 1 2 3 4 5 6 1 2 6 5 3 4 1 2 3 4 6 5 10 2 5 1 3 4 6 5 4 3 2 1 6 1 4 6 2 3 5 1 5 6 3 4 2 6 4 2 1 5 3 3 6 4 5 2 1 1 6 3 4 2 5 5 1 4 2 6 3 6 2 3 1 5 4 5 3 6 1 4 2 */