#include<stdio.h> int main() { int t,n,k; scanf("%d",&t); while(t--) { scanf("%d%d",&k,&n); int a=1; for(int i=1;i<=k;i++) { if(a+i-1+(k-i)<=n) a+=i-1;//k-i:可以再加上的个数 else a++; printf("%d ",a); } printf("\n"); } return 0; }
为什么得加上k-i:
🏳️🌈🏳️🌈🏳️🌈🏳️🌈🏳️🌈🏳️🌈
你品品
#include <bits/stdc++.h> using namespace std; int main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(false); int t; cin>>t; while(t--) { int n; cin>>n; vector<int> a(n); for(int i = 0; i < n; i++) { cin>>a[i]; } sort(a.begin(), a.end()); int pos = 0; while(pos < n && a[pos] == 1) { pos++; } if(pos == n) { cout<<pos/2+(pos%2?1:0)<<"\n"; }else { cout<<pos/2+(pos%2?1:0)+(n-pos)<<"\n"; } } return 0; }
🏳️🌈🏳️🌈🏳️🌈🏳️🌈🏳️🌈🏳️🌈
注意本题的限制条件 重点 而且假如某件衣服是在第x天穿的,那么下一次最早能穿这件衣服的时期为x+N-1
侧面显示了第一周后穿的衣服如果在最后一周提前穿 至少要经历
(后穿的下标—前穿的下标)周
using namespace std; int n,r,m = 0; int a[2510],b[2510]; int main(){ cin >>n ; for(int i =1;i<=n;i++){ cin>>a[i]; } for(int i =1;i<=n;i++){ cin >>r; b[r]=i;//存的是位置 } for(int i =1;i<=n;i++){ m = max(m,i-b[a[i]]); } cout<<m+1;//加上本周 return 0; }
🏳️🌈🏳️🌈🏳️🌈🏳️🌈🏳️🌈🏳️🌈
本来以为这个题的做法很高深,其实逐个判断每个数是奇数或偶数即可
奇数+奇数+奇数=奇数
奇数+偶数+偶数=奇数
#include <bits/stdc++.h> using namespace std; int main() { long long int t; cin >> t; while (t--) { int n; cin >> n; int a[n]; vector<int> o; vector<int> e; int temp; for (int i = 0; i < n; i++) { cin >> temp; if (temp % 2 == 0) e.push_back(i + 1); else o.push_back(i + 1); } if (o.size() > 2) { cout << "YES" << endl; cout << o[0] << ' ' << o[1] << ' ' << o[2] << endl; } else if (o.size() > 0 && e.size() > 1) { cout << "YES" << endl; cout << o[0] << ' ' << e[0] << ' ' << e[1] << endl; } else cout << "NO" << endl; } }
P1598 垂直柱状图 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
这道题特别注意细节
#include<iostream> #include<cstring> using namespace std; int ff[26];//定义计数数组 int main() { int i,j,n,maxn=0; string a; for(i=0;i<4;i++) { getline(cin,a); n=a.size(); for(j=0;j<n;j++) { if(a[j]>='A'&&a[j]<='Z') ff[a[j]-'A']++;//统计字符出现次数 } } for(i=0;i<26;i++) { maxn=max(maxn,ff[i]);//最多次数(最高柱状图) } for(i=maxn;i>0;i--) { for(j=0;j<26;j++) { if(ff[j]>=i) printf("* "); else printf(" ");//模拟,是可以输出的就输出*,否则跳过 } printf("\n"); }//换行 for(i=0;i<26;i++) printf("%c ",i+'A');//输出A~Z }
必须要有printf(' ');这一步
这一步不是不输出,是输出一个空格(空格也占一个位置),然后把后面的输出在这个空格后面
否则会变成
#include<stdio.h> int main() { int n; scanf("%d",&n); if(n%2==0) printf("2"); else printf("1"); return 0; }
分析这个 最远距离最小的含义











