A. 门牌制作
624
B. 既约分数
2481215
C. 蛇形填数
761
D.跑步锻炼
8879
E.七段码
80
F. 成绩统计
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int n;
cin>>n;
int good = 0;
int ave = 0;
for(int i = 0 ; i < n ; i ++){
int x;
cin>>x;
if(x >= 85){
ave ++;
good ++;
}else if(x>=60){
ave ++;
}
}
printf("%.0f%%\n%.0f%%\n",(ave*100.0)/n,(good*100.0)/n);
return 0;
}
G. 回文日期
#include <bits/stdc++.h>
#define int long long
using namespace std;
int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int check(int y,int m){ // leap year
return m == 2 && (y%400 == 0|| (y%4 == 0 && y%100 != 0));
}
signed main()
{
int n;
cin>>n;
int y = n/10000;
int m = (n/10000)/100;
int d = n%100;
string res1 = "";
string res2 = "";
int flag1 = 0;
int flag2 = 0;
/**
y0 y1 y2 y3 m0 m1 d0 d1
**/
for( ; y <= 9999 ; y ++){
for( ; m <= 12; m ++){
for( ; d <= days[m]+check(y,m); d ++){
int y0 = y/1000;
int y1 = (y%1000)/100;
int y2 = (y%100)/10;
int y3 = y%10;
int m0 = m/10;
int m1 = m%10;
int d0 = d/10;
int d1 = d%10;
if(y0 == d1
&& y1 == d0
&& y2 == m1
&& y3 == m0){
flag1 = 1;
res1 += (y0+'0');
res1 += (y1+'0');
res1 += (y2+'0');
res1 += (y3+'0');
res1 += (m0+'0');
res1 += (m1+'0');
res1 += (d0+'0');
res1 += (d1+'0');
}
}
if(flag1) break;
d = 1;
}
if(flag1) break;
m = 1;
}
y = n/10000;
m = (n/10000)/100;
d = n%100;
for( ; y <= 9999 ; y ++){
for( ; m <= 12; m ++){
for( ; d <= days[m]+check(y,m); d ++){
int y0 = y/1000;
int y1 = (y%1000)/100;
int y2 = (y%100)/10;
int y3 = y%10;
int m0 = m/10;
int m1 = m%10;
int d0 = d/10;
int d1 = d%10;
if(y0 == d1
&& y1 == d0
&& y2 == m1
&& y3 == m0
&& y0 == y2
&& y2 == m1
&& m1 == d1
&& y1 == y3
&& y3 == m0
&& m0 == d0
&& y0 != y1){
flag2 = 1;
res2 += (y0+'0');
res2 += (y1+'0');
res2 += (y2+'0');
res2 += (y3+'0');
res2 += (m0+'0');
res2 += (m1+'0');
res2 += (d0+'0');
res2 += (d1+'0');
}
}
if(flag2) break;
d = 1;
}
if(flag2) break;
m = 1;
}
cout<<res1<<endl;
cout<<res2<<endl;
return 0;
}
H.子串分值和
#include <bits/stdc++.h>
#define int long long
const int N = 1e6+7;
using namespace std;
string s;
int dp[N];
int pos[30];
signed main()
{
cin>>s;
for(int i = 0 ; i < 30 ; i ++){
pos[i] = -1;
}
dp[0] = 1;
pos[s[0]-'a'] = 0;
for(int i = 1 ; i < s.size() ; i ++){
dp[i] = dp[i-1]+i-pos[s[i]-'a'];
pos[s[i]-'a'] = i;
//cout<<dp[i]<<endl;
}
int res =0;
for(int i = 0 ; i < s.size() ; i ++)
res += dp[i];
cout<<res<<endl;
return 0;
}
I.平面切分
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
int main()
{
int n;
scanf("%d", &n);
int a, b;
long double A[N], B[N];
pair<long double, long double> p;
set<pair<long double, long double> > s;
for(int i = 0; i < n; i++)
{
scanf("%d %d", &a, &b);
p.first = a;
p.second = b;
s.insert(p);
}
int i = 0;
for(set<pair<long double, long double> >::iterator it = s.begin(); it != s.end(); it++, i++)
{
A[i] = it -> first;
B[i] = it -> second;
}
long long ans = 2;
for(int i = 1; i < s.size(); i++)
{
set<pair<long double, long double> > pos;
for(int j = i-1; j >= 0; j--)
{
int a1 = A[i], b1 = B[i];
int a2 = A[j], b2 = B[j];
if(a1 == a2)
continue;
p.first = 1.0*(b2-b1)/(a1-a2);
p.second = 1.0*a1*((b2-b1)/(a1-a2)) + b1;
pos.insert(p);
}
ans += pos.size() + 1;
}
printf("%d\n", ans);
return 0;
}
J.字串排序
#include <bits/stdc++.h>
#include <queue>
using namespace std;
const int N = 120;
char ans[1000];
int bit[N];
int n;
int flag;
int len;
int lowbit(int x){
return x&(-x);
}
int add(int x,int val){
while(x<N){
bit[x] += val;
x += lowbit(x);
}
}
int sum(int x){
int res = 0;
while(x){
res += bit[x];
x -= lowbit(x);
}
return res;
}
void dfs(int pos,char par){
if(flag) return;
if(pos == len){
int tmp = 0;
ans[len] = 0;
//cout<<ans<<endl;
for(int i = 0 ; i < len ; i ++){
tmp += i-sum(ans[i]-'a'+1);
add(ans[i]-'a'+1,1);
}
for(int i = 0 ; i < len ; i ++){
add(ans[i]-'a'+1,-1);
}
if(tmp == n){
flag = 1;
}
return;
}
for(char now = par; now >= 'a' ; now --){
ans[pos] = now;
dfs(pos+1,now);
if(flag) return;
}
}
int main(){
n = 1;
while(n <= 1000){
flag = 0;
for(len = 2; ; len ++){ // 枚举字符串长度
for(char i = 'b';i <= 'a'+len-1;i ++){
dfs(0,i);
if(flag){
cout<<n<<": "<<ans<<endl;
break;
}
}
if(flag) break;
}
n++;
}
}