S+3-数据结构1
A. 约瑟夫问题
还是很简单的,用链表直接维护就好了1234567891011121314151617181920212223242526272829303132signed main() { IOS; int n, m; cin >> n >> m; vector<int> P(n + 1), RE(n + 1); P[0] = 1; for (int i = 1; i <= n; i++) { P[i] = i + 1; RE[i] = i - 1; if (i == 1) { RE[i] = n; } if (i == n) { P[i] = 1; } } int idx = 0; for (int i = 1; i <= n; ...
TEST 7
A. 老C的输入法
模拟一下就好了12345678910111213141516171819202122232425#define int long longstring s,x[1009];int n,ans;string solve(string s){ string str=""; for(auto i:s){ if(i>='a'&&i<='c')str+="2"; else if(i>='d'&&i<='f')str+="3"; else if(i>='g'&&i<='i')str+="4"; else if(i>='j'&&i<='l')str ...
S+ 期望与概率
A. 骰子游戏123456789101112131415161718192021222324252627282930313233343536373839404142434445464748const int N = 2e3 + 10;const double eps = 1e-9;double p, q, f[N][N];double g(int n, int m){ if (f[n][m] != -1) return f[n][m]; if (!n) return f[n][m] = 0; if (!m) return f[n][m] = 1; //a赢 f[n][m] = 0; if (p > eps) f[n][m] += p * g(n, m - 1); if (q > eps) f[n][m] += q * g(n - 1, m); return f[n][m];}void solve(){ int n, m; cin >> n >> m; / ...
TEST 6
A. 比赛时间
easy12345678int d,h,m;int main(){ scanf("%d%d%d",&d,&h,&m); d=((d-11)*24+h-11)*60+m-11; if(d<0)printf("-1"); else printf("%d",d);}
B. 可怕和弦
只要写个check函数就很好解决12345678910111213141516171819202122232425262728293031323334353637383940414243444546int sc[15],n,c;int a[20005];int vis[89];int cd[15];int ans[20005],num;bool check(int x){ for(int i=1;i<=c;i++) { cd[i]=a[i+x-1]; } sort(cd+1,cd+c+1); ...
TEST 5
A 喝饮料
看似很麻烦,但只有一步123456789101112131415int n, x, y, k, ans;signed main() { IOS; cin >> n >> x >> y; k = n / x; ans += n / x; while (k >= y) { ans += k / y; k = k % y + k / y; } if (k + 1 == y) ans++; cout << ans << endl; return 0;}
B. 非零位
只要取一个大小差不多的十的倍数就好了12345678910111213141516const ll mod = 100000;signed main() { IOS; ll n, ans = 1; cin >> n; for (ll i = 1; i <= n; i++) ...
TEST 4
A 长方体12345678signed main() { IOS; int a, b, c; cin >> a >> b >> c; int d = sqrt(a * b * c); cout << 4 * (d / a + d / b + d / c) << endl; return 0;}
B 数括号1234567891011121314151617181920212223string s;int l[50005], ans;signed main() { IOS; cin >> s; s = ' ' + s; for (int i = 2; i < s.size(); i++) { l[i] = l[i - 1]; if (s[i] == '(' && s[i - 1] == '(') { ...
TEST 3
A. 不要落后
按照规则找就好了1234567891011121314151617181920212223242526272829303132333435363738map<string, int> q;set<int> g;signed main() { IOS; int n; cin >> n; for (int i = 1; i <= n; i++) { string s; int x; cin >> s >> x; q[s] += x; } for (auto x : q) { int y = x.second; g.insert(y); } if (g.size() == 1) { if (q.size() == 1) { for (auto x : q) { ...
TEST 2
A. 调饮料师
直接暴力就好了1234567891011121314151617signed main() { IOS; int c[3], s[3]; for (int i = 0; i < 3; i++) { cin >> c[i] >> s[i]; } for (int i = 0; i < 100; i++) { int idx = i % 3; int tmp = min(c[(idx + 1) % 3] - s[(idx + 1) % 3], s[idx]); s[idx] -= tmp; s[(idx + 1) % 3] += tmp; } for (int i = 0; i < 3; i++) { cout << s[i] << endl; } return 0;}
B. 心直口筷 ...
S+2 DP
A.小泽做披萨
简单的用状态压缩进行表示状态12345678910111213141516171819202122232425262728293031323334#define MAX 22int n, m, a, b;int mark[1 << MAX], idx[1 << MAX];bool DP[1 << MAX];signed main() { IOS; cin >> n >> m; for (int i = 1; i <= m; i++) { int a, b; cin >> a >> b; --a, --b; mark[a] |= (1 << b); mark[b] |= (1 << a); } DP[0] = 1; for (int i = 1; i <= n; i++) { idx[1 < ...
TEST 1
A 不想走
求一下最短的距离就好了12345678signed main() { IOS; int a, b, x, y; cin >> a >> b >> x >> y; cout << min({abs(b - a), abs(a - x) + abs(y - b), abs(a - y) + abs(b - x)}) << endl; return 0;}
B 连续数求和
直接暴力就好了1234567891011121314151617181920212223242526272829303132333435int main() { int T; cin>>T; for(int i=1;i<=100000;i++) { a[i]=a[i-1]+i; } for(int i=1;i<=T;i++) { cin>>n; for(int j=2;j<=1000 ...