
难绷,掉坑里了QAQ
这道题首先要知道求等差数列的公式
然后,求d的时候不要掉进坑以为最小的差值就是公差 No!!!!要是最小数值刚好是公差两倍不就错了是吧,所以这个时候就要求各个值之间的最大公因数!!懂了吧,这才是本题解题的关键(骂自己
- #include
- using namespace std;
- const int N = 1e5 + 10;
- int a[N];
- int n;
- int main()
- {
- cin >> n;
- for(int i = 1; i <= n; i ++ ) cin >> a[i];
- sort(a + 1, a + 1 + n);
- int d = a[2] - a[1];
- for(int i = 3; i <= n; i ++ ) d = __gcd(d, a[i] - a[i - 1]);
- if(d == 0) cout << n << endl;
- else cout << (a[n] - a[1]) / d + 1<< endl;
- return 0;
- }

md巨坑一道题,一开始贪心错了,后面推把我推吐了QAQ

- #include
- using namespace std;
- #define ll long long
- int a[200009];
- int cnt;
- int main(){
- int n, m;
- while(cin >> n >> m){
- int N = n + m + 1;
- ll sum = 0;
- for (int i = 0; i < N; i++) {
- cin >> a[i];
- if(a[i] < 0) cnt ++ ;
- }
- sort(a, a + N);
- if (m == 0){
- for (int i = 0; i < N; i++){
- sum += a[i];
- }
- }
- else if(cnt >= m){
- for(int i = 0; i < N; i ++ )
- sum += abs(a[i]);
- }
- else{
- for(int i = 0; i < N; i++)
- sum += abs(a[i]);
- if(cnt == 0) sum -= 2 * a[0];
- }
- cout << sum << endl;
- }
-
- return 0;
- }
- #include
- using namespace std;
- #define ll long long
- int a[200009];
- int main(){
- int n, m;
- while(cin >> n >> m){
- int N = n + m + 1;
- ll sum = 0;
- for (int i = 0; i < N; i++) cin >> a[i];
- if (m == 0){
- for (int i = 0; i < n + m + 1; i++){
- sum += a[i];
- }
- }
- else{
- sort(a, a + N);
- sum = a[N - 1] - a[0];
- for (int i = 1; i < N - 1; i++)
- sum += abs(a[i]);
- }
- cout << sum << endl;
- }
-
- return 0;
- }

思维题思维题。。。。最讨厌思维题但又比较好理解。。。
- #include
- using namespace std;
- string a, b, c, d;
- string s1, s2;
- int main(){
- cin >> a >> b >> c >> d;
- for(int i = 0; i < 2; i ++ ){
- if(a[i] != 'X') s1 += a[i];
- }
- for(int i = 1; i >= 0; i -- ){
- if(b[i] != 'X') s1 += b[i];
- }
- s1 += s1;
- for(int i = 0; i < 2; i ++ ){
- if(c[i] != 'X') s2 += c[i];
- }
- for(int i = 1; i >= 0; i -- ){
- if(d[i] != 'X') s2 += d[i];
- }
- if(s1.find(s2) == string :: npos) puts("NO");
- else puts("YES");
- return 0;
- }
倒在了分数取值不能是负数,应该要干脆点零分QAQ
- #include
- using namespace std;
- int n, c;
- const int N = 1010;
- int p[N], t[N];
- int main(){
- cin >> n >> c;
- for(int i = 0; i < n; i ++ ) cin >> p[i];
- for(int i = 0; i < n; i ++ ) cin >> t[i];
- int tsum1 = 0, sum1 = 0, sum2 = 0, tsum2 = 0;
- for(int i = 0; i < n; i ++ ){
- tsum1 += t[i];
- sum1 += max(0, p[i] - c * tsum1);
- }
- for(int i = n - 1; i >= 0; i -- ){
- tsum2 += t[i];
- sum2 += max(0, p[i] - c * tsum2);
- }
- if(sum1 > sum2) cout << "Limak" << endl;
- if(sum1 < sum2) cout << "Radewoosh" << endl;
- if(sum1 == sum2) cout << "Tie" << endl;
-
-
- return 0;
- }

set自动从小到大排序
* 注意find函数在set中没有找到的表达
- set<int> s;
- if(s.find(b[j])==s.end())//b[j]不在set
s中 - {
- s.insert(b[j]);//执行操作
- }
- #include
- using namespace std;
- const int N = 150010;
- int t[N], flag[N];
- int n, k, q;
- set<int> s;
- int main(){
- cin >> n >> k >> q;
- for(int i = 1; i <= n; i ++ ) cin >> t[i];
- while(q -- ){
- int type, id;
- cin >> type >> id;
- if(type == 1){
- s.insert(t[id]);
- if(s.size() > k) s.erase(s.begin());
- }
- else if(type == 2){
- if(s.find(t[id]) == s.end()) puts("NO");
- else puts("YES");
- }
- }
- }

卡住的地方:优先队列的< 、>对应的升降序是不一样的
- #include
- using namespace std;
- struct stu
- {
- int priority, idx;
- bool operator < (const stu &b)const{
- if(priority == b.priority) return idx > b.idx;
- return priority < b.priority;
- }
- }temp;
-
- int main()
- {
- int n;
- priority_queue
q[4]; - while(scanf("%d", &n) != EOF){
- int x1, x2, t = 1;
- for(int i = 1; i <= 3; i ++ ){
- while(q[i].size()) q[i].pop();
- }
- string str;
- for(int i = 0; i < n; i ++ ){
- cin >> str;
- if(str == "IN"){
- cin >> x1 >> x2;
- temp.idx = t ++ ;
- temp.priority = x2;
- q[x1].push(temp);
- }
- else if(str == "OUT"){
- cin >> x1;
- if(q[x1].size()){
- cout << q[x1].top().idx << endl;
- q[x1].pop();
- }
- else cout << "EMPTY" << endl;
- }
-
- }
- }
- return 0;
- }

- #include
- using namespace std;
- typedef long long LL;
- const int maxn = 1e6 + 5;
- LL base[maxn];
- LL ans[maxn];
- int n, num = 1;
- LL s;
- vector<int> vec[maxn];
- void dfs(int now,LL val){
- ans[now] += base[now] * val;
- for(int i = 0; i < vec[now].size(); i ++ ){
- dfs(vec[now][i], val);
- }
- }
- int main(){
- cin >> n >> s;
- for(int i = 0; i < maxn; i ++ ) base[i] = s;
- memset(ans, 0, sizeof ans);
- while(n -- ){
- LL val;
- int op, id;
- cin >> op;
- if(op == 1){
- cin >> id;
- num ++ ;
- vec[id].push_back(num);
- }
- else if(op == 2){
- cin >> id >> val;
- base[id] = val;
- }
- else if(op == 3){
- cin >> id >> val;
- dfs(id, val);
- }
- else if(op == 4){
- cin >> id;
- cout << ans[id] << endl;
- }
- }
- return 0;
- }

- #include
- using namespace std;
- const int N=100005;
- int dp[N][12];
- int main()
- {
- int n;
- int x,T;
- while(scanf("%d",&n)==1&&n!=0)
- {
- memset(dp,0,sizeof(dp));
- int m=0;
- for(int i=0;i
- {
- scanf("%d%d",&x,&T);
- dp[T][x]++;
- m = max(m, T);
- }
- for(int i=m-1;i>=0;i--)
- for(int j=0;j<11;j++)
- {
- if(j==0)
- dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]);
- else if(j==10)
- dp[i][j]+=max(dp[i+1][j-1],dp[i+1][j]);
- else
- dp[i][j]+=max(dp[i+1][j-1],max(dp[i+1][j],dp[i+1][j+1]));
- }
-
- printf("%d\n",dp[0][5]);
- }
- return 0;
- }
-
组建足球队

- #include
- using namespace std;
- int score[201][10][10], a[201], b[201], c[20], d[20];
- int main(){
- while(1){
- int j, k, s, n;
- scanf("%d", &n);
- int m1, m2, m3;
- if(n == 0) break;
- for(int i = 1; i <= n; i ++ ){
- scanf("%d %d ", &a[i], &b[i]);
- }
- for(int i = 0; i <= n; i ++ ){
- for(int j = 0; j <= 8; j ++ ){
- for(int k = 0; k <= 8; k ++ ){
- score[i][j][k] = 0;
- }
- }
- }
- score[1][1][0] = a[1];
- score[1][0][1] = b[1];
- for(int i = 2; i <= n; i ++ ){
- for(int j = 0; j <= 8 && j <= i; j ++ ){
- for(int k = 0; k <= 8 && (j + k <= i); k ++ ){
- if(j + k == 0) continue;
- m1 = score[i - 1][j][k];
- if(j > 0) m2 = score[i - 1][j - 1][k] + a[i];
- else m2 = 0;
- if(k > 0) m3 = score[i - 1][j][k - 1] + b[i];
- else m3 = 0;
- score[i][j][k] = max(max(m1, m2), m3);
- }
- }
- }
- printf("%d\n", score[n][8][8]);
- j = k = 8;
- s = 0;
- for(int m = n; m >= 1; m -- ){
- if(s == 16) break;
- if(score[m][j][k] != score[m - 1][j][k]){
- s ++ ;
- c[s] = m;
- if(j > 0){
- if(score[m][j][k] == score[m- 1][j - 1][k] + a[m]){
- d[s] = 1;
- j -- ;
- }
- else{
- d[s] = 2;
- k -- ;
- }
- }
- else{
- d[s] = 2;
- k -- ;
- }
- }
- }
- for(int i = 16; i >= 1; i -- ){
- printf("%d %d %d %d\n", c[i], a[c[i]], b[c[i]], d[i]);
- }
- }
- }
子序列

dp[i] [j] 表示s的前i个包含t的前j个字符所需要修改的最少字符是多少
当s[i] = t[j]时,也就是字符相同时,就代表这个字符不需要进行修改,故dp[i] [j] = dp[i - 1] [j - 1]
当s[i] != t[j]时,也就是有可能得修改,修改的话就是dp[i - 1] [j - 1] + 1, 还有可能是之前就已经包含住他了, 就是dp[i - 1] [j],所以dp[i] [j] = min(dp[i - 1] [j - 1] + 1, dp[i - 1] [j])
- #include
- #define INF 0x3f3f3f3f
- using namespace std;
- typedef long long LL;
- const int N = 1010;
- int dp[N][N];
- string s, t;
- int main(){
- cin >> s >> t;
- s = " " + s;
- t = " " + t;
- memset(dp, INF, sizeof dp);
- dp[0][0] = 0;
- for(int i = 1; i <= s.size(); ++i)dp[i][0] = 0;
- for(int i = 1; i <= s.size(); ++i){
- for(int j = 1; j <= t.size(); ++j){
- if(s[i] == t[j]){
- dp[i][j] = dp[i - 1][j - 1];
- }
- else dp[i][j] = min(dp[i - 1][j - 1] + 1, dp[i - 1][j]);
- }
- }
- cout<
size()][t.size()]< - return 0;
- }
年号字串

- #include
- using namespace std;
- typedef long long LL;
- void fun(LL n){
- if(n == 0) return;
- if(n % 26 != 0){
- fun(n / 26);
- printf("%c", n % 26 + 'A' - 1);
- }
- else{
- fun((n - 1) / 26);
- printf("Z");
- }
- }
- int main(){
- LL num;
- while(scanf("%lld", &num) != EOF){
- fun(num);
- puts("");
- }
- return 0;
- }
-
相关阅读:
idea使用git版本控制
Go--数据类型
java springboot 如何实现小程序支付
mysql分区表的增删改查操作
基于NET蛋糕销售网站 毕业设计-附源码090918
矩阵的乘法运算与css的3d变换(transform)
IDEA重装后打开的一些设置
贪心算法 之会议安排
java学习笔记-初级
EMNLP 2023 | DeepMind提出大模型In-Context Learning的可解释理论框架
-
原文地址:https://blog.csdn.net/weixin_63914060/article/details/126453978