1.门牌制作
答案:624
2.既约分数
答案:2481215
3.蛇形填数
//int main()
//{
// int k[100][100],a=1,b=1,c=2;
// for (int i = 1; i <= 40; i++)
// {
// int q, p;
// if (a == 1)
// {
// q = i;
// p = 1;
// a = -1;
// }
// else
// {
// q = 1;
// p = i;
// a = 1;
// }
// for (;q >= 1 && p >= 1&&p<=i&&q<=i;)
// {
// if (q + p == i+1)
// {
// k[q][p] = b;
// b++;
// }
// if (a==-1)
// {
// q--;
// p++;
// }
// else
// {
// q++;
// p--;
// }
// }
// }
// cout << k[20][20];
//}
4.七段码
int ve[7][7];
bool visit[7];
int ans=0;
set<set<int> > se;
void dfs(int x,set<int> s)
{
if(!se.count(s))
{
se.insert(s);
// set<int>::iterator it;
// for(it=s.begin();it!=s.end();it++)
// {
// cout<<char('a'+*it)<<" ";
// }
// cout<<endl;
ans++;
}
if(s.size()==7)
return ;
for(int j=0;j<7;j++)
{
if(visit[j]||!ve[x][j])
continue;
s.insert(j);
visit[j]=1;
dfs(j,s);
visit[j]=0;
s.erase(j);
}
}
void add(int x,int y)
{
ve[x][y]=1;
ve[y][x]=1;
}
int main()
{
add(0,1);
add(0,5);
add(1,6);
add(1,2);
add(2,6);
add(2,3);
add(3,4);
add(4,5);
add(4,6);
add(5,6);
set<int> s;
for(int i=0;i<=6;i++)
{
s.insert(i);
visit[i]=1;
dfs(i,s);
visit[i]=0;
s.erase(i);
}
cout<<ans<<endl;
}
5跑步锻炼
答案:8879
6回文日期
int months[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int date)
{
int year = date / 10000;
int month = date % 10000 / 100;
int day = date % 100;
if(!day || month < 0 || month > 12 ) return false;
if(month != 2 && day >months[month]) return false;
if(month == 2)
{
if((year%4==0&&year%100!=0)||(year%400==0))
{
if(day > 29) return false;
}
else
{
if(day > 28) return false;
}
}
return true;
}
bool check1(string s)
{
int len = s.size();
for(int i = 0, j = len - 1; i < j ; i++,j--)
{
if(s[i] != s[j]) return false;
}
return true;
}
bool check2(string s)
{
if(check1(s))
{
if(s[0]!=s[2] || s[1]!= s[3] || s[0] == s[1]) return false;
return true;
}
}
int main()
{
int date,flag=0;
cin>>date;
for(int i = date + 1; ;i++)
{
if(check(i))
{
string s = to_string(i);
if(check1(s)&&!flag)
{
cout<<i<<endl;
flag = 1;
}
if(check2(s))
{
cout<<i<<endl;
return 0;
}
}
}
return 0;
}
7字串排序
const int N=1e4+10;
int n,len=N,ma=0;
int f[N][30],line[N][30];
int m[30],sum[30];
char a[N];
int init()
{
for(int i=1;i<=n;i++)
{
for(int k=25;k>=0;k--)
{
f[i][k]=f[i][k+1];
for(int j=1;j<i;j++)
{
f[i][k]=max(f[j][k+1]+(i-j)*j,f[i][k]);
}
if(f[i][k]>=n)
{
len=i; break;
}
}
if(len<N) break;
}
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
init();
for(int i=1;i<=len;i++)
{
for(int c=0;c<26;c++)
{
m[c]++;
bool flag=0;
for(int k=25;k>=0;k--)
{
sum[k]=m[k]+sum[k+1];
}
f[i][26]=f[i-1][26]+sum[c+1];
for(int now=i;now<=len;now++)
{
for(int k=25;k>=0;k--)
{
f[now][k]=f[now][k+1];
for(int j=i;j<now;j++)
{
if(k==25)
{
f[now][k]=f[now-1][k]; break;
}
f[now][k]=max(f[now][k],f[j][k+1]+(now-j)*(j-i+sum[k+1]));
}
if(f[now][k]>=n)
{
flag=1;break;
}
}
if(flag) break;
}
if(flag)
{
a[i]='a'+c; break;
}
m[c]--;
}
}
for(int i=1;i<=len;i++) cout<<a[i];
}
8成绩统计
int n,sum1,sum2;
int a[10010];
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]>=60) sum1++;
if(a[i]>=85) sum2++;
}
printf("%d%%\n",(int)(sum1*100.0/n+0.5));
printf("%d%%\n",(int)(sum2*100.0/n+0.5));
return 0;
}
9子串分值和
//const int N = 1e5 + 5;
//char p[N]; int f[N],ans, pos[26];
//int main()
//{
// scanf("%s", p + 1);
// for (int e = 1; p[e] != NULL; e++)
// {
// int t = p[e] - 'a';
// f[e] = f[e - 1] + e - pos[t];;
// pos[t] = e;;
// ans += f[e];
// }
// printf("%d", ans);
//}
10平面切分
typedef pair<double, double> pdd;
set<pdd> lines;
int res = 1;
int cmp(double c, double d) {
set<pdd> points;
pdd it;
for (auto i = lines.begin(); i != lines.end(); i++) {
double a = i->first, b = i->second;
if (a != c) {
it.first = (d - b) / (a - c);
it.second = c * it.first + d;
points.insert(it);
}
}
return points.size();
}
int main() {
int n;
cin >> n;
while (n--) {
double a, b;
cin >> a >> b;
int count1 = lines.size();
lines.insert({ a,b });
if (lines.size() != count1) {
res++;
res += cmp(a, b);
}
}
cout << res << endl;
return 0;
}